मै मैक ओएस एक्स 10.5 और उच्चतर के लिए ओपनजीएल स्क्रीनसेवर लिखा है जो मार्चिंग क्यूब्स का उपयोग करके निर्मित कताई दिल दिखाता है। यह मेरा काला 13.3 "विकास मैकबुक चल हिम तेंदुए (10.6), अच्छा और चमकदार पर ठीक काम करता है।ओपनजीएल ऑब्जेक्ट मैक ओएस एक्स 10.6 में चमकदार/चमकदार, लेकिन 10.5 नहीं। क्यूं कर?
लेकिन जब मैं एक नए मैकबुक प्रो लेकिन चल तेंदुए (10.5), दिल प्रतिसाद नहीं पर यह कोशिश यह चमकदार नहीं है। ऐसा प्रतीत होता है कि यह केवल परिवेश/फैलाने वाली रोशनी के साथ जलाया गया है, लेकिन कोई विशिष्ट प्रकाश नहीं है। ऐसा लगता है कि मैंने प्रकाश के specular घटक को 0 पर सेट किया था। नई मैकबुक में एक एनवीडिया ग्राफिक्स कार्ड है। एक पुराना 10.6 एक इंटेल XMA3100 उसकी चल गया है।
ई मेरा ओपनजीएल प्रारंभिक कोड है। हृदय मार्चिंग क्यूब्स का उपयोग करके बनाया गया है और मैं सामान्य वैक्टरों की गणना भी कर रहा हूं।
- (void)setUpOpenGL { [[glView openGLContext] makeCurrentContext]; // Synchronize buffer swaps with vertical refresh rate GLint swapInterval = 1; [[glView openGLContext] setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval]; glShadeModel(GL_SMOOTH); glClearDepth(1.0); glClearColor (0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); // Light GLfloat ambient_light[] = { 0.2f, 0.2f, 0.2f, 1.0f }; GLfloat diffuse_light[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat specular_light[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat position_light[] = { 0.0f, 0.0f, -1.0f, 0.0f }; glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_light); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse_light); glLightfv(GL_LIGHT0, GL_SPECULAR, specular_light); glLightfv(GL_LIGHT0, GL_POSITION, position_light); // Material glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); GLfloat mat_ambient[] = {0.7, 0.0, 0.0, 1.0}; GLfloat mat_diffuse[] = { 0.7, 0.0, 0.0, 1.0 }; GLfloat mat_specular[] = { 0.0, 0.0, 0.0, 0.0 }; GLfloat mat_shininess[] = { 100.0 }; glColor3f(1.0, 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); // Copy isosurface vertices to graphics array glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, [marchingCubes vertices]); glNormalPointer(GL_FLOAT, 0, [marchingCubes normals]); }
वास्तविक ड्राइंग कोड इस तरह दिखता है:
- (void)drawRect:(NSRect)rect { [super drawRect:rect]; [[glView openGLContext] makeCurrentContext]; glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Adjust viewpoint to give heart beat effect glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, radius, 2*radius/3, 0, 0, 0, 0, 0, 1); // Adjust rotation to make heart spin glRotatef(rotation, 0.0f, 0.0f, 1.0f); // Draw heart glDrawArrays(GL_TRIANGLES, 0, [marchingCubes vertexCount]/3); glFlush(); [[glView openGLContext] flushBuffer]; // Rotate and scale a bit rotation += 1.0f; radius = 4.0 + 0.25*sin(rotation/4); }कोई भी विचार
क्यों specular प्रकाश अंतर है? क्या कुछ ग्राफिक्स कार्ड पर specular प्रकाश बस समर्थित नहीं है? किसी भी पॉइंटर्स की बहुत सराहना की जाती है।
कभी यह पता नहीं लगा लेकिन परियोजना को सोर्स किया गया: https://github.com/thinkski/ValentineGL –