PyOpenGL を使用してシーンに多くの球体がありますが、別の球体と区別することができません。
形状の上に輪郭を作成するにはどうすればよいですか?.
PyOpenGL を使用してシーンに多くの球体がありますが、別の球体と区別することができません。
形状の上に輪郭を作成するにはどうすればよいですか?.
固定パイプライン (< OpenGL-3.x) を使用してメッシュの周りに輪郭またはシルエットを作成する簡単な方法を以下に示します。
コア プロファイル OpenGL 3.x 以降を使用すると、まったく同じ操作を行うことができますが、代わりに頂点シェーダーを使用します。
固定パイプラインを使用してこれを実現するために必要なコードは、次のように単純です。
# Render silhouette around object
glPushMatrix()
glCullFace(GL_FRONT) # Front face culling makes us render only the inside of the sphere, which gives the illusion of a silhouette
glScale(1.04, 1.04, 1.04) # This makes the silhouette show up around the object
glDisable(GL_LIGHTING) # We only want a plain single colour silhouette
glColor(0., 1., 0.) # Silhouette colour
glutSolidSphere(2,20,20) # This can be any object, not limited to spheres (even non-convex objects)
glPopMatrix()
以下は、 http ://code.activestate.com/recipes/325391-open-a-glut-window-and-draw-a-sphere にある GLUT の例に基づいて、球をシルエットでレンダリングする PyOpenGL プログラムの簡単な例です。-using-pythono/ :
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
import sys
name = 'ball_glut'
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
glutInitWindowSize(400,400)
glutCreateWindow(name)
glClearColor(0.,0.,1.,1.)
glShadeModel(GL_SMOOTH)
glEnable(GL_CULL_FACE)
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)
lightZeroPosition = [10.,4.,10.,1.]
lightZeroColor = [1.0,1.0,1.0,1.0]
glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition)
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor)
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1)
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05)
glEnable(GL_LIGHT0)
glutDisplayFunc(display)
glMatrixMode(GL_PROJECTION)
gluPerspective(40.,1.,1.,40.)
glMatrixMode(GL_MODELVIEW)
gluLookAt(0,0,10,
0,0,0,
0,1,0)
glPushMatrix()
glutMainLoop()
return
def display():
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
# Render sphere normally
glPushMatrix()
color = [1.0,0.,0.,1.]
glMaterialfv(GL_FRONT,GL_DIFFUSE,color)
glCullFace(GL_BACK)
glEnable(GL_LIGHTING)
glutSolidSphere(2,20,20)
# Render silhouette around object
glPushMatrix()
glCullFace(GL_FRONT) # Front face culling makes us render only the inside of the sphere, which gives the illusion of a silhouette
glScale(1.04, 1.04, 1.04) # This makes the silhouette show up around the object
glDisable(GL_LIGHTING) # We only want a plain fixed colour silhouette
glColor(0., 1., 0.) # Silhouette colour
glutSolidSphere(2,20,20) # This can be any object, not limited to spheres (even non-convex objects)
glPopMatrix()
glPopMatrix()
glutSwapBuffers() # Display results.
return
if __name__ == '__main__': main()