मेरे कार्यक्रम नीचे एक सरल प्रकाश के द्वारा प्रकाशित रोटेशन में एक घन प्रदर्शित करना चाहिए का उपयोग कर सही नहीं। समस्या यह है कि घन चमक रहा है। जब मैं कॉल glEnable (GL_DEPTH_TEST) को वापस लेने घन चमकती नहीं है, लेकिन मैं इसे अंदर चेहरे देख सकते हैं (यह एक सामान्य बात है कोई गहराई परीक्षण न होने के कारण)। हालांकि यह कॉल आवश्यक है। इसलिए मुझे समझ में नहीं आता कि इस फ़ंक्शन का कॉल सही तरीके से क्यों काम नहीं करता है।प्रदर्शन glEnable (GL_DEPTH_TEST)
#include <iostream>
#include <SDL/SDL.h>
#include <gl/glut.h>
const static int WIDTH = 640;
const static int HEIGHT = 480;
GLfloat angle = 0.0f;
static GLfloat position[4] = {0.0, 50.0, -50.0, 1.0};
static GLfloat diffuse[3] = {0.64, 0.64, 0.64};
static GLfloat specular[3] = {0.64, 0.64, 0.64};
static GLfloat emissive[3] = {0.0, 0.0, 1.0};
static GLfloat vertices[72] =
{
1.000000, -1.000000, -1.000000, //V1
1.000000, -1.000000, 1.000000, //V2
-1.000000, -1.000000, 1.000000, //V3
-1.000000, -1.000000, -1.000000, //V4
1.000000, 1.000000, -0.999999, //V5
-1.000000, 1.000000, -1.000000, //V8
-1.000000, 1.000000, 1.000000, //V7
0.999999, 1.000000, 1.000001, //V6
1.000000, -1.000000, -1.000000, //V1
1.000000, 1.000000, -0.999999, //V5
0.999999, 1.000000, 1.000001, //V6
1.000000, -1.000000, 1.000000, //V2
1.000000, -1.000000, 1.000000, //V2
0.999999, 1.000000, 1.000001, //V6
-1.000000, 1.000000, 1.000000, //V7
-1.000000, -1.000000, 1.000000, //V3
-1.000000, -1.000000, 1.000000, //V3
-1.000000, 1.000000, 1.000000, //V7
-1.000000, 1.000000, -1.000000, //V8
-1.000000, -1.000000, -1.000000, //V4
1.000000, 1.000000, -0.999999, //V5
1.000000, -1.000000, -1.000000, //V1
-1.000000, -1.000000, -1.000000, //V4
-1.000000, 1.000000, -1.000000 //V8
};
static GLfloat normals[72] =
{
0.000000, -1.000000, 0.000000,
0.000000, -1.000000, 0.000000,
0.000000, -1.000000, 0.000000,
0.000000, -1.000000, 0.000000,
0.000000, 1.000000, 0.000000,
0.000000, 1.000000, 0.000000,
0.000000, 1.000000, 0.000000,
0.000000, 1.000000, 0.000000,
1.000000, 0.000000, 0.000000,
1.000000, 0.000000, 0.000000,
1.000000, 0.000000, 0.000000,
1.000000, 0.000000, 0.000000,
-0.000000, -0.000000, 1.000000,
-0.000000, -0.000000, 1.000000,
-0.000000, -0.000000, 1.000000,
-0.000000, -0.000000, 1.000000,
-1.000000, -0.000000, -0.000000,
-1.000000, -0.000000, -0.000000,
-1.000000, -0.000000, -0.000000,
-1.000000, -0.000000, -0.000000,
0.000000, -0.000000, -1.000000,
0.000000, -0.000000, -1.000000,
0.000000, -0.000000, -1.000000,
0.000000, -0.000000, -1.000000
};
static void eventListener(SDL_Event *pEvent, bool *pContinue)
{
while (SDL_PollEvent(pEvent))
{
switch(pEvent->type)
{
case SDL_QUIT:
*pContinue = false;
break;
case SDL_KEYDOWN:
switch (pEvent->key.keysym.sym)
{
case SDLK_ESCAPE:
*pContinue = false;
break;
}
}
}
}
static void beginRender(void)
{
/*Perspective*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, WIDTH, HEIGHT);
gluPerspective(60.0, (float)(WIDTH/HEIGHT), 0.0f, 1000.0f);
gluLookAt(0.0f, 0.0, 7.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
/*Clear screen*/
glClearDepth(1.0f);
glClearColor(0.13f, 0.12f, 0.13f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/*Prepare model transformations*/
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/*Light settings*/
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
/*Depth test*/
glEnable(GL_DEPTH_TEST); //PROBLEM COMES FROM HERE
}
static void renderFrame(void)
{
/*light position*/
glLightfv(GL_LIGHT0, GL_POSITION, position);
/*Model transformations*/
glPushMatrix();
glRotatef(angle, 0.0f, 1.0f, 1.0f);
/*Light materials*/
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
glMaterialfv(GL_FRONT, GL_EMISSION, emissive);
glMateriali(GL_FRONT, GL_SHININESS, 10);
/*Model rendering*/
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glDrawArrays(GL_QUADS, 0, 24);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
angle += 0.010f;
glPopMatrix();
}
static void endRender(void)
{
glFlush();
SDL_GL_SwapBuffers();
}
static void startRendering(void)
{
bool continuer = true;
SDL_Event event;
while (continuer)
{
eventListener(&event, &continuer);
beginRender();
renderFrame();
endRender();
}
}
int main(int ac, char **av)
{
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetCaption("Test luminosity",NULL);
SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_OPENGL | SDL_DOUBLEBUF);
startRendering();
SDL_Quit();
return (0);
}
यहाँ glEnable (GL_DEPTH_TEST) के साथ स्क्रीन है (चेहरे चमकती रहे हैं)
और यह कॉल के बिना (कोई चमकती प्रदर्शन नहीं बल्कि गहराई परीक्षण):
यहाँ मेरी कोड है
मैंने सफलता के बिना कई कोड संयोजन की कोशिश की।
किसी को भी मेरी मदद कर सकते है?
आपकी मदद के लिए अग्रिम धन्यवाद।
हैलो, आप अपने जवाब के लिए बहुत बहुत धन्यवाद। मैट्रिक्स और ज्यामिति प्रबंधन के बारे में मैं आपके जैसे मैट्रिक्स प्रबंधन और शेडर्स का उपयोग करने जा रहा हूं। यह मेरा मुख्य उद्देश्य है। सबको धन्यवाद। अलविदा। – user1364743