from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
angle = 0
move = 0
size = 1
def read_txt(file):
f = open(file,"r")
all_list = f.readlines()[:]
vertex_list=[]
face_list=[]
normal_list=[]
texture_list = []
for data in all_list:
data = data.replace("\n","")
if "VERTECES" in data:
result = data.split(" ")
verteces_len= int(result[-1])
if "FACES" in data:
result = data.split(" ")
face_len = int(result[-1])
if "NORMALS" in data:
result = data.split(" ")
normal_len = int(result[-1])
if "TEXTURES" in data:
result = data.split(" ")
texture_len = int(result[-1])
for data in all_list:
if "," in data:
data = data.replace(" \n","")
result = data.split(",")
if len(result) == 3 and len(vertex_list)<verteces_len:
vertex_list.append(result)
elif len(result) == 2:
texture_list.append(result)
elif len(result) == 9:
face_list.append(result)
else:
normal_list.append(result)
if (len(vertex_list),len(face_list),len(normal_list),len(texture_list)) == (verteces_len,face_len,normal_len,texture_len):
return vertex_list,face_list,normal_list,texture_list
else:
return None
def perp():
glClearColor(0.0, 0.0, 0.0,0.0)
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(37,1,0.1,5)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(-2.0, -3.0, -2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
def OnMouse(button,state,x,y):
global size
if(button==GLUT_LEFT_BUTTON and state==GLUT_DOWN):
size = size+0.01
glMatrixMode(GL_MODELVIEW)
glScalef(size,size,size)
glutPostRedisplay()
if(button==GLUT_RIGHT_BUTTON and state==GLUT_DOWN):
size = size-0.01
glMatrixMode(GL_MODELVIEW)
glScalef(size,size,size)
glutPostRedisplay()
def KeyBoards(key,x,y):
global angle,move,size
if key == b"w":
move = move+0.001
glMatrixMode(GL_MODELVIEW)
glRotatef(angle,-1,0,0)
glutPostRedisplay()
elif key == b"s":
move = move-0.001
glMatrixMode(GL_MODELVIEW)
glRotatef(angle,-1,0,0)
glutPostRedisplay()
elif key == b"a":
angle = angle-2
glMatrixMode(GL_MODELVIEW)
glRotatef(angle,-1,0,0)
glutPostRedisplay()
elif key == b"d":
angle = angle+2
glMatrixMode(GL_MODELVIEW)
glRotatef(angle,-1,0,0)
glutPostRedisplay()
elif key == b"\r":
angle = 0
move = 0
size =1
def drawFunc():
file ="data.txt"
glClearColor(0.1,0.1,0.1,0.1)
vertex_list,face_list,normal_list,texture_list = read_txt(file)
glClear(GL_COLOR_BUFFER_BIT)
glRotatef(angle,0,1,0);
glScalef(size,size,size)
glTranslatef(move,0,0)
#perp()
glBegin(GL_POLYGON)
for vex in vertex_list:
glColor3f(0.5, 0.16, 0.16)
#glColor3f(0.3, 0.7, 0.9)
glVertex3f(eval(vex[0]),eval(vex[1]),eval(vex[2]))
glEnd()
glFlush()
def main():
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowPosition(0,0)
glutInitWindowSize(400,400)
glutCreateWindow("object")
glutDisplayFunc(drawFunc)
glutIdleFunc(drawFunc)
glutMouseFunc(OnMouse)
glutKeyboardFunc(KeyBoards)
glutMainLoop()
if __name__=="__main__":
main()
opengl读取文件建立模型
最新推荐文章于 2023-02-21 17:59:52 发布
本文档详细介绍了如何使用OpenGL从txt文件读取顶点、面、法线和纹理坐标数据,并实现3D模型的动态缩放、旋转和渲染。通过`read_txt`函数处理数据,`OnMouse`和`KeyBoards`函数控制交互。核心内容包括模型加载和OpenGL基本操作。
摘要由CSDN通过智能技术生成