UfnCod3r
پنج شنبه 28 دی 1391, 20:15 عصر
سلام
من وقتی می خوام مدل رو نمایش بدم مشکل پیش میاد !
یعنی وقتی اندیکس های تو VBO می دم مشکل داره اما مستقیم میدم نه ! دعوا سر خط 80 هست !:متفکر:
خط 77 که کامنتوندمش کار میکنه !:متفکر: :بامزه:
:عصبانی++:
:متفکر:
#include <GL/glew.h>
#include <Windows.h>
#include <stdlib.h>
#include <sdl.h>
struct Vec2{float x,y; };
struct Vec3{float x,y,z; };
GLuint g_texID;
GLuint g_vboID;
Vec3 g_vertices[3] = {{0,0,0}, {200,0,0}, {0,200,0}};
Vec3 g_normals[3] = {{0,0,0}, {1,0,0}, {0,1,0}};
Vec3 g_colors[3] = {{1,0,0}, {0,1,0}, {0,0,1}};
Vec2 g_tCoords[3] = {{0,0}, {1,0}, {0,1}};
GLushort g_indexes[3] = {0,1,2};
void InitGL()
{
//Texture Load ----------
SDL_Surface* $bmp = SDL_LoadBMP("asd.bmp");
glGenTextures(1, &g_texID);
glBindTexture(GL_TEXTURE_2D, g_texID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, $bmp->w, $bmp->h, 0, GL_RGB, GL_UNSIGNED_BYTE, $bmp->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_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);
SDL_FreeSurface($bmp);
glGenBuffersARB(1,&g_vboID);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, g_vboID);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals)+sizeof(g_colo rs)+sizeof(g_tCoords)+sizeof(g_indexes)
, 0, GL_STATIC_DRAW_ARB);
glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, sizeof(g_vertices), g_vertices);//verts
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices), sizeof(g_normals), g_normals);//norms
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals), sizeof(g_colors), g_colors);//cols
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals)+sizeof(g_colo rs)
, sizeof(g_tCoords), g_tCoords);//tcoord
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals)+sizeof(g_colo rs)+sizeof(g_tCoords)
, sizeof(g_indexes), g_indexes);//indexes
glMatrixMode(GL_PROJECTION);
glOrtho(0,800,600,0,0,1000);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
float r = 0;
void Draw()
{
glLoadIdentity();
r += 0.6f;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(400,300,0);
glRotatef(r, 0.0f, 0.0f, 1.0f);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, g_vboID);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_INDEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, (void*)0);
glNormalPointer(GL_FLOAT, 0, (void*)sizeof(g_vertices));
glColorPointer(3, GL_FLOAT, 0, (void*)(sizeof(g_vertices)+sizeof(g_normals)));
glTexCoordPointer(2,GL_FLOAT, 0, (void*)(sizeof(g_vertices)+sizeof(g_normals)+sizeo f(g_colors)));
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, g_indexes);
//?????????????????
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT
, (void*)(sizeof(g_vertices)+sizeof(g_normals)+sizeo f(g_colors)+sizeof(g_tCoords)));
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_INDEX_ARRAY);
SDL_GL_SwapBuffers();
}
int main(int argc, char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface* $scrSurf = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL | SDL_DOUBLEBUF);
glewInit();
if(glewIsSupported("GL_ARB_vertex_buffer_object"))
printf("GL_ARB_vertex_buffer_object Supported");
else
{
printf("GL_ARB_vertex_buffer_object Not Supported");
return 0;
}
InitGL();
bool $run = true;
while($run)
{
SDL_Event $event;
while(SDL_PollEvent(&$event))
{
switch ($event.type)
{
case SDL_QUIT:
$run = false;
break;
}
}
Draw();
Sleep(16);
}
glDeleteBuffersARB(1, &g_vboID);
glDeleteTextures(1, &g_texID);
return 0;
}
من وقتی می خوام مدل رو نمایش بدم مشکل پیش میاد !
یعنی وقتی اندیکس های تو VBO می دم مشکل داره اما مستقیم میدم نه ! دعوا سر خط 80 هست !:متفکر:
خط 77 که کامنتوندمش کار میکنه !:متفکر: :بامزه:
:عصبانی++:
:متفکر:
#include <GL/glew.h>
#include <Windows.h>
#include <stdlib.h>
#include <sdl.h>
struct Vec2{float x,y; };
struct Vec3{float x,y,z; };
GLuint g_texID;
GLuint g_vboID;
Vec3 g_vertices[3] = {{0,0,0}, {200,0,0}, {0,200,0}};
Vec3 g_normals[3] = {{0,0,0}, {1,0,0}, {0,1,0}};
Vec3 g_colors[3] = {{1,0,0}, {0,1,0}, {0,0,1}};
Vec2 g_tCoords[3] = {{0,0}, {1,0}, {0,1}};
GLushort g_indexes[3] = {0,1,2};
void InitGL()
{
//Texture Load ----------
SDL_Surface* $bmp = SDL_LoadBMP("asd.bmp");
glGenTextures(1, &g_texID);
glBindTexture(GL_TEXTURE_2D, g_texID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, $bmp->w, $bmp->h, 0, GL_RGB, GL_UNSIGNED_BYTE, $bmp->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_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);
SDL_FreeSurface($bmp);
glGenBuffersARB(1,&g_vboID);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, g_vboID);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals)+sizeof(g_colo rs)+sizeof(g_tCoords)+sizeof(g_indexes)
, 0, GL_STATIC_DRAW_ARB);
glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, sizeof(g_vertices), g_vertices);//verts
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices), sizeof(g_normals), g_normals);//norms
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals), sizeof(g_colors), g_colors);//cols
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals)+sizeof(g_colo rs)
, sizeof(g_tCoords), g_tCoords);//tcoord
glBufferSubData(GL_ARRAY_BUFFER_ARB, sizeof(g_vertices)+sizeof(g_normals)+sizeof(g_colo rs)+sizeof(g_tCoords)
, sizeof(g_indexes), g_indexes);//indexes
glMatrixMode(GL_PROJECTION);
glOrtho(0,800,600,0,0,1000);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
float r = 0;
void Draw()
{
glLoadIdentity();
r += 0.6f;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(400,300,0);
glRotatef(r, 0.0f, 0.0f, 1.0f);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, g_vboID);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_INDEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, (void*)0);
glNormalPointer(GL_FLOAT, 0, (void*)sizeof(g_vertices));
glColorPointer(3, GL_FLOAT, 0, (void*)(sizeof(g_vertices)+sizeof(g_normals)));
glTexCoordPointer(2,GL_FLOAT, 0, (void*)(sizeof(g_vertices)+sizeof(g_normals)+sizeo f(g_colors)));
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, g_indexes);
//?????????????????
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT
, (void*)(sizeof(g_vertices)+sizeof(g_normals)+sizeo f(g_colors)+sizeof(g_tCoords)));
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_INDEX_ARRAY);
SDL_GL_SwapBuffers();
}
int main(int argc, char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface* $scrSurf = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL | SDL_DOUBLEBUF);
glewInit();
if(glewIsSupported("GL_ARB_vertex_buffer_object"))
printf("GL_ARB_vertex_buffer_object Supported");
else
{
printf("GL_ARB_vertex_buffer_object Not Supported");
return 0;
}
InitGL();
bool $run = true;
while($run)
{
SDL_Event $event;
while(SDL_PollEvent(&$event))
{
switch ($event.type)
{
case SDL_QUIT:
$run = false;
break;
}
}
Draw();
Sleep(16);
}
glDeleteBuffersARB(1, &g_vboID);
glDeleteTextures(1, &g_texID);
return 0;
}