Sábado 21 de Diciembre de 2024, 15:22
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Específica
»
Programación de Videojuegos
»
OpenGL
(Moderador:
Ruben3d
) »
Texturas en OpenGL
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Texturas en OpenGL (Leído 4667 veces)
sasha95
Nuevo Miembro
Mensajes: 4
Texturas en OpenGL
«
en:
Sábado 11 de Abril de 2009, 05:01 »
0
Buenas, yo estoy recién aprendiendo OpenGL y tengo un problema con las texturas. Estoy siguiendo los tutoriales de usuarios.lycos.es/andromeda_studios y estoy programando la textura en base a eso. El problema es que el archivo se carga perfectamente, pero el cuadrado se renderiza totalmente blanco sin ninguna textura. Mi codigo dedicado a las texturas es este:
Código: C++
class
Texture
{
public
:
Texture
(
)
;
~Texture
(
)
;
void
Delete
(
)
;
void
Use
(
)
;
bool
LoadBMP
(
char
*
filename
)
;
bool
Make
(
char
*
filename
)
;
private
:
unsigned
int
ID
;
unsigned
int
width, height
;
}
;
Texture
::
Texture
(
)
{
ID
=
0
;
}
Texture
::
~Texture
(
)
{
Delete
(
)
;
}
void
Texture
::
Delete
(
)
{
if
(
ID
)
{
glDeleteTextures
(
1
,
&
ID
)
;
ID
=
0
;
}
}
void
Texture
::
Use
(
)
{
glBindTexture
(
GL_TEXTURE_2D, ID
)
;
}
bool
Texture
::
Make
(
char
*
filename
)
{
glGenTextures
(
1
,
&
ID
)
;
//ID++;
glBindTexture
(
GL_TEXTURE_2D, ID
)
;
glTexEnvf
(
GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE
)
;
glTexParameteri
(
GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR
)
;
glTexParameteri
(
GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
)
;
glTexParameteri
(
GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP
)
;
glTexParameteri
(
GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP
)
;
return
true
;
}
bool
Texture
::
LoadBMP
(
char
*
filename
)
{
FILE
*
Image
;
AUX_RGBImageRec
*
BMP
;
if
(
!
filename
)
{
MessageBox
(
NULL
,
"El nombre del archivo no es valido"
,
"Error"
, MB_OK
|
MB_ICONEXCLAMATION
)
;
return
false
;
}
Image
=
fopen
(
filename,
"r"
)
;
if
(
!
Image
)
{
MessageBox
(
NULL
,
"El archivo no existe"
,
"Error"
, MB_OK
|
MB_ICONEXCLAMATION
)
;
return
false
;
}
fclose
(
Image
)
;
Make
(
filename
)
;
BMP
=
auxDIBImageLoad
(
filename
)
;
width
=
BMP
-
>
sizeX
;
height
=
BMP
-
>
sizeY
;
glTexImage2D
(
GL_TEXTURE_2D,
0
,
3
, width, height,
0
, GL_RGB, GL_UNSIGNED_BYTE, BMP
-
>
data
)
;
delete
BMP
-
>
data
;
delete
BMP
;
return
true
;
}
Esa es la declaración de la clase. En el archivo main se encuentra esto:
Código: C++
TEXTURE
=
new
Texture
(
)
;
if
(
!
TEXTURE
-
>
LoadBMP
(
"texture.bmp"
)
)
return
0
;
CUADRADO
=
new
Triangle
[
2
]
;
//bueno esta es una clase que tambien es del tutorial pero que es bastante simple, no tiene ningun error...
CUADRADO
[
0
]
.
Vertexes
[
0
]
.
Loc
.
Define
(
-
1.0f
,
-
1.0f
,
0.0f
)
;
//Define son los vectores
CUADRADO
[
0
]
.
Vertexes
[
0
]
.
SetTexCoords
(
0.0f
,
0.0f
)
;
// en SetTexCoords se definen las coordenadas de la textura...
CUADRADO
[
0
]
.
Vertexes
[
1
]
.
Loc
.
Define
(
-
1.0f
,
1.0f
,
0.0f
)
;
CUADRADO
[
0
]
.
Vertexes
[
1
]
.
SetTexCoords
(
0.0f
,
1.0f
)
;
CUADRADO
[
0
]
.
Vertexes
[
2
]
.
Loc
.
Define
(
1.0f
,
1.0f
,
0.0f
)
;
CUADRADO
[
0
]
.
Vertexes
[
2
]
.
SetTexCoords
(
1.0f
,
1.0f
)
;
CUADRADO
[
1
]
.
Vertexes
[
0
]
.
Loc
.
Define
(
-
1.0f
,
-
1.0f
,
0.0f
)
;
CUADRADO
[
1
]
.
Vertexes
[
0
]
.
SetTexCoords
(
0.0f
,
0.0f
)
;
CUADRADO
[
1
]
.
Vertexes
[
1
]
.
Loc
.
Define
(
1.0f
,
-
1.0f
,
0.0f
)
;
CUADRADO
[
1
]
.
Vertexes
[
1
]
.
SetTexCoords
(
1.0f
,
0.0f
)
;
CUADRADO
[
1
]
.
Vertexes
[
2
]
.
Loc
.
Define
(
1.0f
,
1.0f
,
0.0f
)
;
CUADRADO
[
1
]
.
Vertexes
[
2
]
.
SetTexCoords
(
1.0f
,
1.0f
)
;
Por ultimo, la funcion render:
Código: C++
int
Render
(
)
{
glClear
(
0x00004100
)
;
glLoadIdentity
(
)
;
glTranslatef
(
0.0f
,
0.0f
, zScale
)
;
glRotatef
(
xAngle,
0.5
,
0.0
,
0.0
)
;
glRotatef
(
yAngle,
0.0
,
0.5
,
0.0
)
;
glRotatef
(
zAngle,
0.0
,
0.0
,
0.5
)
;
TEXTURE
-
>
Use
(
)
;
glBegin
(
GL_TRIANGLES
)
;
for
(
int
j
=
0
;
j
<
2
;
j
++
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
glTexCoord2f
(
CUADRADO
[
j
]
.
Vertexes
[
i
]
.
U
, CUADRADO
[
j
]
.
Vertexes
[
i
]
.
V
)
;
//bueno aca es donde se utilizan los parametros de SetTexCoords...
glVertex3f
(
CUADRADO
[
j
]
.
Vertexes
[
i
]
.
Loc
.
X
,
CUADRADO
[
j
]
.
Vertexes
[
i
]
.
Loc
.
Y
,
CUADRADO
[
j
]
.
Vertexes
[
i
]
.
Loc
.
Z
)
;
}
}
glEnd
(
)
;
return
1
;
}
El codigo es bastante largo pero por favor si pueden ayudarme se los agradeceria mucho toy re atascado xD
chau suerte y espero ayuda si no es problema
Tweet
vicengetorix
Nuevo Miembro
Mensajes: 3
Re: Texturas en OpenGL
«
Respuesta #1 en:
Miércoles 27 de Mayo de 2009, 15:46 »
0
Habria que ver el programa conpleto.
De momento una sugerencia. Usa los tipo de datos de OpenGL como Gluint.
No se si sera eso pero yo probaria a definir los vertices en sentido contrario a las agujas del relog.
En mi pagina estoy haciendo un tutorial muy facil de entender de hacer juegos con OpenGL y C++.
El capitulo de texturaras ya esta publicado.
Echale unvistazo por si te vale:
http
dos puntos barra barra
unsitioweb
punto
com
Suerte.
killito
Nuevo Miembro
Mensajes: 14
Re: Texturas en OpenGL
«
Respuesta #2 en:
Miércoles 17 de Febrero de 2010, 23:11 »
0
Cuando aparece la textura blanca es que no se ha cargado la textura, como si no se hubiese encontrado el archivo, cuando aparece gris es lo mismo pero con la iluminacion activada
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Específica
»
Programación de Videojuegos
»
OpenGL
(Moderador:
Ruben3d
) »
Texturas en OpenGL