7 Python Kivy Projects (With Full Tutorials) – Pythonista Planet
KIVY 3D Rotating Monkey Head¶
kivy 3D 旋转猴子头
How to display rotating monkey example in a given layout. · Issue #6688 · kivy/kivy · GitHub
3d 模型下载链接
P99 - Download Free 3D model by zzzs570 [b78e0cf] - Sketchfab 在此处发现了好帅的3d模型,但是报错,先按照原先模型的数据进行运行,monkey.obj 则运行正常,因此这里面应该是有相关数据计算在里面的。
kivy/examples/3Drendering at master · kivy/kivy · GitHub
This example demonstrates using OpenGL to display a rotating monkey head. This includes loading a Blender OBJ file, shaders written in OpenGL’s Shading Language (GLSL), and using scheduled callbacks.
这个例子展示了如何使用OpenGL来显示一个旋转的猴子头部。这包括加载一个来自Blender的OBJ文件、使用OpenGL着色语言(GLSL)编写的着色器,以及使用计划好的回调函数。
The monkey.obj file is an OBJ file output from the Blender free 3D creation software. The file is text, listing vertices and faces and is loaded using a class in the file objloader.py. The file simple.glsl is a simple vertex and fragment shader written in GLSL.
monkey.obj文件是一个OBJ格式的文件,这个文件是由免费的3D创作软件Blender输出的。该文件是文本格式的,列出了顶点和面,并通过objloader.py文件中的一个类来加载。simple.glsl文件是一个简单的顶点和片元着色器,使用GLSL编写。
具体来说:
OBJ文件:OBJ文件是一种标准的3D模型文件格式,它定义了物体的几何体,包括顶点、面、纹理坐标等信息。在这个例子中,
monkey.obj文件包含了猴子头部的几何信息,用于在OpenGL环境中渲染。Blender:Blender是一款开源的3D图形软件,支持从建模、动画、材质、渲染、到音频处理、视频编辑等一系列的3D创作流程。用户可以在Blender中创建3D模型,并将其导出为OBJ等格式,供其他软件使用。
objloader.py:这是一个Python脚本文件,其中定义了一个类,用于加载和解析OBJ文件。它读取文件中的顶点、面等数据,并将这些数据转换为OpenGL可以使用的格式。
GLSL(OpenGL Shading Language):GLSL是一种用于OpenGL的高级着色语言,它允许开发者编写用于图形渲染的顶点和片元着色器。在这个例子中,
simple.glsl文件包含了两个着色器程序:一个顶点着色器和一个片元着色器。顶点着色器处理顶点的变换,而片元着色器则负责计算每个像素的颜色。OpenGL:OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形。它广泛用于CAD、虚拟现实、科学可视化程序和电子游戏开发等领域。在这个例子中,OpenGL被用来渲染加载的猴子头部模型,并使其旋转。
回调函数:在OpenGL程序中,回调函数通常用于处理如窗口大小改变、键盘输入或定时器事件等异步事件。在这个例子中,回调函数可能被用来更新猴子头部的旋转角度,并在每次渲染循环中重新绘制它。
File 3Drendering/main.py¶
'''
3D Rotating Monkey Head
========================
This example demonstrates using OpenGL to display a rotating monkey head. This
includes loading a Blender OBJ file, shaders written in OpenGL's Shading
Language (GLSL), and using scheduled callbacks.
The monkey.obj file is an OBJ file output from the Blender free 3D creation
software. The file is text, listing vertices and faces and is loaded
using a class in the file objloader.py. The file simple.glsl is
a simple vertex and fragment shader written in GLSL.
'''
from kivy.app import App
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.resources import resource_find
from kivy.graphics.transformation import Matrix
from kivy.graphics.opengl import glEnable, glDisable, GL_DEPTH_TEST
from kivy.graphics import RenderContext, Callback, PushMatrix, PopMatrix, \
Color, Translate, Rotate, Mesh, UpdateNormalMatrix
from objloader import ObjFile
class Renderer(Widget):
def __init__(self, **kwargs):
self.canvas = RenderContext(compute_normal_mat=True)
self.canvas.shader.source = resource_find('simple.glsl')
self.scene = ObjFile(resource_find("monkey.obj"))
super(Renderer, self).__init__(**kwargs)
with self.canvas:
self.cb = Callback(self.setup_gl_context)
PushMatrix()
self.setup_scene()
PopMatrix()
self.cb = Callback(self.reset_gl_context)
Clock.schedule_interval(self.update_glsl, 1 / 60.)
def setup_gl_context(self, *args):
glEnable(GL_DEPTH_TEST)
def reset_gl_context(self, *args):
glDisable(GL_DEPTH_TEST)
def update_glsl(self, delta):
asp = self.width / float(self.height)
proj = Matrix().view_clip(-asp, asp, -1, 1, 1, 100, 1)
self.canvas['projection_mat'] = proj
self.canvas['diffuse_light'] = (1.0, 1.0, 0.8)
self.canvas['ambient_light'] = (0.1, 0.1, 0.1)
self.rot.angle += delta * 100
def setup_scene(self):
Color(1, 1, 1, 1)
PushMatrix()
Translate(0, 0, -3)
self.rot = Rotate(1, 0, 1, 0)
m = list(self.scene.objects.values())[0]
UpdateNormalMatrix()
self.mesh = Mesh(
vertices=m.vertices,
indices=m.indices,
fmt=m.vertex_format,
mode='triangles',
)
PopMatrix()
class RendererApp(App):
def build(self):
return Renderer()
if __name__ == "__main__":
RendererApp().run()
def setup_scene(self):
在提供的 setup_scene 方法中,你正在设置一个3D场景,包括颜色设置、矩阵变换、旋转,以及从某个场景对象(self.scene.objects)中获取第一个对象的网格数据来创建一个新的 Mesh 对象。不过,这个方法中有几个潜在的问题和可以改进的地方。下面是对这些点的分析和建议:
-
颜色设置:
Color(1, 1, 1, 1)设置了当前的颜色为白色(RGBA都是1)。这通常用于绘制物体,但如果你没有立即绘制操作,这个颜色设置可能不会立即生效,除非它后面紧跟着绘制命令。 -
矩阵变换:
PushMatrix()和PopMatrix()用于保存和恢复当前的矩阵状态。这是个好习惯,因为它可以帮助你避免在复杂的变换中出错。Translate(0, 0, -3)将整个场景沿Z轴向后移动3个单位。这通常用于调整观察者和场景之间的距离。
-
旋转:
self.rot = Rotate(1, 0, 1, 0)这行代码创建了一个旋转对象,但没有立即应用到任何物体上。如果你想让某个物体旋转,你需要在绘制该物体之前应用这个旋转。
-
获取和设置网格数据:
m = list(self.scene.objects.values())[0]这行代码假设self.scene.objects是一个字典,并且至少有一个元素。如果字典为空,这将引发IndexError。建议添加一些错误处理来确保字典不为空。UpdateNormalMatrix()这行代码通常用于更新法线矩阵,但它通常是在设置完所有变换后,并且在绘制之前调用的。在这个上下文中,它的位置可能不是最佳的,因为它可能不会被紧随其后的PopMatrix()正确地影响。- 创建
Mesh对象时,你正确地使用了从m对象中获取的数据。但是,确保m.vertices,m.indices, 和m.vertex_format是有效的,并且m确实是一个包含这些属性的对象。
print(m)
<objloader.MeshData object at 0x0000028FF39E1910>
当你看到输出 <objloader.MeshData object at 0x0000028FF39E1910> 时,这表示 m 是一个 objloader.MeshData 类的实例,而 Python 默认使用 __repr__ 方法(如果没有定义,则使用 __str__ 方法)来显示对象的“表示”或“字符串化”版本。在这个例子中,默认的表示是对象的类型(objloader.MeshData)和它在内存中的地址(0x0000028FF39E1910)。
要获得 m 返回的其他信息,你需要访问 MeshData 类的属性或方法。通常,这样的类会定义一些属性来存储如顶点、法线、纹理坐标、索引等信息。但是,没有 objloader 库的具体实现细节,我只能给出一些一般性的建议。
以下是一些可能的步骤来获取 m 的其他信息:
-
查看文档或源代码:如果
objloader是第三方库,查看其文档或源代码以了解MeshData类的结构和可用的属性/方法。 -
使用 dir() 函数:在 Python 中,你可以使用
dir()函数来获取对象的所有属性和方法名。这可以帮助你了解m对象有哪些可用的属性。
print(dir(m))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'calculate_normals', 'indices', 'name', 'vertex_format', 'vertices']
这将列出 m 对象上所有可用的属性和方法名。
3. 访问属性:一旦你知道了 MeshData 类的属性名,你就可以直接访问它们来获取所需的信息。
indices 美/ˈɪndɪsiːz/ n.指数;目录(index的复数)
print(m.indices) # 假设 MeshData 类有一个名为 indices的属性

得到[0, 1, 2, ....., 11807] 的递加数列表
vertices 美/ˈvɜːrtəˌsiz/ n.至高点;天顶;头顶(vertex 的复数)
print(m.vertices) # 假设 MeshData 类有一个名为 vertices的属性

4.调用方法:如果 MeshData 类定义了任何有用的方法(如 calculate_normals()),你也可以调用它们来获取或修改数据
m.calculate_normals() # 假设这个方法用于计算法线
print(m.normals) # 假设现在有一个 normals 属性存储了计算后的法线
5.自定义输出:如果你经常需要查看 MeshData 对象的详细信息,你可以考虑在 MeshData 类中重写 __str__ 或 __repr__ 方法来提供更友好的输出。
class MeshData:
def __init__(self, ...):
# 初始化代码
def __str__(self):
return f"MeshData(vertices={self.vertices}, indices={self.indices})"
这样,当你打印 MeshData 实例时,它将显示更具体的信息。
请注意,上述代码示例中的 MeshData 类和方法名(如 vertices、indices、calculate_normals)是假设的,你需要根据 objloader 库的实际实现进行调整。
def setup_gl_context(self, *args):
glDisable(GL_DEPTH_TEST)
https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glEnable.xml
glEnable 和 glDisable 函数用于启用和禁用OpenGL的各种功能。你可以使用 glIsEnabled 或 glGet 函数来确定任何功能的当前设置状态。除了 GL_DITHER 之外,每个功能的初始值都是 GL_FALSE。而 GL_DITHER 的初始值是 GL_TRUE。简而言之,这些函数允许你控制OpenGL渲染过程中的各种特性,如是否启用抖动(dithering)等,而 glIsEnabled 和 glGet 提供了查询这些特性当前状态的方法。
GL_DEPTH_TEST
如果启用,则会进行深度比较并更新深度缓冲区。请注意,即使深度缓冲区存在且深度掩码(depth mask)非零,如果深度测试被禁用,那么深度缓冲区也不会被更新。请参见glDepthFunc和glDepthRangef函数,它们分别用于设置深度测试的比较函数和定义深度缓冲区的映射范围。简而言之,深度测试控制是否以及如何根据当前像素的深度值与深度缓冲区中对应位置的深度值进行比较,如果启用深度测试并满足深度测试条件,则可能会更新深度缓冲区。
File 3Drendering/objloader.py¶
class MeshData(object):
def __init__(self, **kwargs):
self.name = kwargs.get("name")
self.vertex_format = [
(b'v_pos', 3, 'float'),
(b'v_normal', 3, 'float'),
(b'v_tc0', 2, 'float')]
self.vertices = []
self.indices = []
def calculate_normals(self):
for i in range(len(self.indices) / (3)):
fi = i * 3
v1i = self.indices[fi]
v2i = self.indices[fi + 1]
v3i = self.indices[fi + 2]
vs = self.vertices
p1 = [vs[v1i + c] for c in range(3)]
p2 = [vs[v2i + c] for c in range(3)]
p3 = [vs[v3i + c] for c in range(3)]
u, v = [0, 0, 0], [0, 0, 0]
for j in range(3):
v[j] = p2[j] - p1[j]
u[j] = p3[j] - p1[j]
n = [0, 0, 0]
n[0] = u[1] * v[2] - u[2] * v[1]
n[1] = u[2] * v[0] - u[0] * v[2]
n[2] = u[0] * v[1] - u[1] * v[0]
for k in range(3):
self.vertices[v1i + 3 + k] = n[k]
self.vertices[v2i + 3 + k] = n[k]
self.vertices[v3i + 3 + k] = n[k]
class ObjFile:
def finish_object(self):
if self._current_object is None:
return
mesh = MeshData()
idx = 0
for f in self.faces:
verts = f[0]
norms = f[1]
tcs = f[2]
for i in range(3):
# get normal components
n = (0.0, 0.0, 0.0)
if norms[i] != -1:
n = self.normals[norms[i] - 1]
# get texture coordinate components
t = (0.0, 0.0)
if tcs[i] != -1:
t = self.texcoords[tcs[i] - 1]
# get vertex components
v = self.vertices[verts[i] - 1]
data = [v[0], v[1], v[2], n[0], n[1], n[2], t[0], t[1]]
mesh.vertices.extend(data)
tri = [idx, idx + 1, idx + 2]
mesh.indices.extend(tri)
idx += 3
self.objects[self._current_object] = mesh
# mesh.calculate_normals()
self.faces = []
def __init__(self, filename, swapyz=False):
"""Loads a Wavefront OBJ file. """
self.objects = {}
self.vertices = []
self.normals = []
self.texcoords = []
self.faces = []
self._current_object = None
material = None
for line in open(filename, "r"):
if line.startswith('#'):
continue
if line.startswith('s'):
continue
values = line.split()
if not values:
continue
if values[0] == 'o':
self.finish_object()
self._current_object = values[1]
# elif values[0] == 'mtllib':
# self.mtl = MTL(values[1])
# elif values[0] in ('usemtl', 'usemat'):
# material = values[1]
if values[0] == 'v':
v = list(map(float, values[1:4]))
if swapyz:
v = v[0], v[2], v[1]
self.vertices.append(v)
elif values[0] == 'vn':
v = list(map(float, values[1:4]))
if swapyz:
v = v[0], v[2], v[1]
self.normals.append(v)
elif values[0] == 'vt':
self.texcoords.append(list(map(float, values[1:3])))
elif values[0] == 'f':
face = []
texcoords = []
norms = []
for v in values[1:]:
w = v.split('/')
face.append(int(w[0]))
if len(w) >= 2 and len(w[1]) > 0:
texcoords.append(int(w[1]))
else:
texcoords.append(-1)
if len(w) >= 3 and len(w[2]) > 0:
norms.append(int(w[2]))
else:
norms.append(-1)
self.faces.append((face, norms, texcoords, material))
self.finish_object()
def MTL(filename):
contents = {}
mtl = None
return
for line in open(filename, "r"):
if line.startswith('#'):
continue
values = line.split()
if not values:
continue
if values[0] == 'newmtl':
mtl = contents[values[1]] = {}
elif mtl is None:
raise ValueError("mtl file doesn't start with newmtl stmt")
mtl[values[0]] = values[1:]
return contents
def __init__(self, **kwargs):
MeshData 类是一个用于存储和管理网格数据的类,它通常用于图形编程中,特别是在使用OpenGL、DirectX或其他图形API时。这个类通过初始化时接收的关键字参数(**kwargs)来设置一些基础属性,并定义了网格的顶点格式、顶点数据和索引数据。下面是对这个类及其主要属性的详细解释:
类属性
name:网格的名称,这是一个可选属性,通过初始化时的kwargs字典中的"name"键来设置。如果没有提供,则默认为None。vertex_format:这是一个列表,定义了网格中顶点的格式。每个元素都是一个元组,包含三个值:顶点属性的名称(字节字符串),该属性的组件数量(如位置向量的3个分量),以及该属性的数据类型(在这个例子中是'float',表示浮点型)。这个列表定义了每个顶点包含哪些信息(位置、法线、纹理坐标等)。vertices:这是一个列表,用于存储网格的顶点数据。每个顶点都是一个列表或元组,其元素数量和数据类型需要与vertex_format中定义的顶点格式相匹配。indices:这也是一个列表,用于存储索引数据。索引数据通常用于指定顶点数组中用于绘制网格的顶点的顺序,可以支持顶点的重用,从而减少顶点数据的存储量。
构造函数
构造函数__init__(self, **kwargs)接受任意数量的关键字参数(**kwargs),这允许在创建MeshData实例时灵活地设置属性。在这个例子中,只有name属性是通过这种方式设置的,因为它是可选的。vertex_format、vertices和indices属性则在构造函数中被直接初始化,不依赖于kwargs。
使用示例
# 创建一个MeshData实例,不设置名称
mesh = MeshData()
# 添加一些顶点数据(这里只是示例,实际数据需要根据vertex_format来设置)
mesh.vertices.append((1.0, 2.0, 3.0, 0.0, 0.0, 1.0, 0.5, 0.5)) # 假设这里按照v_pos, v_normal, v_tc0的顺序
mesh.vertices.append((4.0, 5.0, 6.0, 0.0, 1.0, 0.0, 1.0, 1.0))
# 添加索引数据(这里假设是绘制两个三角形)
mesh.indices = [0, 1, 2, 2, 1, 3] # 注意这里的索引是基于0的
# 现在mesh对象包含了顶点数据、索引数据,以及顶点格式,可以用于图形渲染
注意:在上面的示例中,为了简化,我直接在vertices列表中添加了完整的顶点数据(包括位置、法线和纹理坐标),但在实际应用中,你需要根据vertex_format中定义的格式来组织这些数据。此外,由于vertex_format中的属性名称是字节字符串(如b'v_pos'),在添加顶点数据时,你可能需要按照相应的格式来打包或解包数据,特别是在与图形API交互时。
def calculate_normals(self):
在这段代码中,calculate_normals 方法的目标是计算并设置三维网格中每个三角形的法线。然而,这段代码有几个潜在的问题和需要改进的地方。首先,它假设每个顶点都紧跟着它的法线数据,这在某些情况下可能不是真的,特别是如果顶点数据不包含法线信息,或者法线数据是以不同的方式组织的。
此外,这段代码将每个三角形的法线直接赋值给了构成该三角形的所有顶点,这在实际应用中可能不是最佳选择。通常,每个顶点可以有多个法线(取决于它属于多少个三角形),并且可能需要通过某种方式(如平均)来合并这些法线。但是,对于简单的情况或平滑的曲面,这种“共享法线”的方法可以接受。
下面是这段代码的修正和改进版本,同时考虑到上述问题和假设顶点数据已经包含了足够的空间来存储法线(即每个顶点后紧跟三个法线分量):
def calculate_normals(self):
if not self.vertices or not self.indices:
return # 如果没有顶点或索引,则不进行计算
# 假设每个顶点后紧跟三个法线分量
num_vertices = len(self.vertices) // 6 # 假设每个顶点有6个分量(位置3个+法线3个)
for i in range(0, len(self.indices), 3): # 遍历每个三角形
v1i, v2i, v3i = self.indices[i:i+3]
# 获取顶点的位置
p1 = self.vertices[v1i*6:v1i*6+3]
p2 = self.vertices[v2i*6:v2i*6+3]
p3 = self.vertices[v3i*6:v3i*6+3]
# 计算两个向量
u = [p3[j] - p1[j] for j in range(3)]
v = [p2[j] - p1[j] for j in range(3)]
# 计算法线
n = [
u[1] * v[2] - u[2] * v[1],
u[2] * v[0] - u[0] * v[2],
u[0] * v[1] - u[1] * v[0]
]
# 归一化法线
length = (n[0]**2 + n[1]**2 + n[2]**2) ** 0.5
if length != 0:
n = [n[i] / length for i in range(3)]
# 将法线赋值给顶点(这里简单地将每个三角形的法线赋给所有顶点)
for vi in (v1i, v2i, v3i):
# 假设法线分量紧跟在位置分量之后
start_index = vi * 6 + 3
self.vertices[start_index:start_index+3] = n
# 注意:这种简单赋值可能不适用于所有情况,特别是当顶点共享多个三角形时
请注意,这个修正版本还包含了法线的归一化,以确保法线是单位长度的。此外,它假设了每个顶点在self.vertices列表中占用6个连续的分量(3个位置分量和3个法线分量)。如果你的数据结构与此不同,你需要相应地调整索引计算。
另外,请记住,将单个三角形的法线赋值给所有相关顶点在平滑曲面上可能不是最佳选择。对于更复杂的场景,你可能需要实现一种方法来合并来自多个三角形的法线。
class ObjFile:
def finish_object(self):
在您提供的 ObjFile 类中,finish_object 方法用于将当前正在处理的对象(如果存在)转换为 MeshData 实例,并准备用于后续的渲染或其他处理。这个方法从 ObjFile 类中收集顶点、法线和纹理坐标信息,并将它们组织成 MeshData 类的格式。不过,有几个地方可以改进或注意:
-
假设每个面都是三角形:代码假设每个面都是由三个顶点、法线和纹理坐标组成的三角形。这是 OBJ 文件格式的常见情况,但应确保这一假设适用于您正在处理的所有文件。
-
索引的处理:在 OBJ 文件中,索引通常是从 1 开始的,但在 Python 列表中索引是从 0 开始的。因此,您在访问
self.vertices、self.normals和self.texcoords时使用了-1来调整索引。这是正确的做法。 -
顶点数据的组织:您正在将每个顶点的位置、法线和纹理坐标连续地添加到
mesh.vertices列表中。然而,这种方式意味着每个顶点都被视为一个独立的实体,而不是重用已存在的顶点来形成网格。在大多数情况下,为了提高效率和渲染性能,应该尽量重用顶点。此外,这种方法也没有遵循MeshData类中定义的顶点格式(除非MeshData的vertices列表被设计为这种扁平结构)。 -
索引列表的创建:您为每个三角形创建了索引列表,并将其添加到
mesh.indices中。这是正确的,但请注意,如果顶点数据没有按预期重用,这些索引可能无法正确映射到渲染管线中的顶点。 -
法线的计算:您注释掉了
mesh.calculate_normals()的调用。如果MeshData类中的calculate_normals方法能够正确地根据顶点位置和索引来计算平滑的法线(而不是简单地复制每个面的法线),那么您可能希望在完成所有面的处理后调用它。但是,如果每个面都有自己的法线,并且您想要保留这些法线,那么不调用它可能是正确的。 -
重置
self.faces:在处理完当前对象后,您将self.faces重置为空列表。这是必要的,以便为下一个对象准备数据。 -
MeshData类的完整性:请确保MeshData类已经正确定义,并且具有处理这些数据的必要方法(如calculate_normals,尽管它可能不是必需的)。 -
异常处理:在实际应用中,您可能还需要添加异常处理来捕获并处理数据格式错误或文件读取错误等问题。
如果您希望按照 MeshData 类中定义的顶点格式(即每个顶点是一个包含位置、法线和纹理坐标的元组或列表)来组织数据,并且希望重用顶点,那么您可能需要修改 finish_object 方法来创建一个顶点和索引的映射,并在添加顶点时检查该映射以确定是否已存在具有相同位置、法线和纹理坐标的顶点。这通常涉及更复杂的逻辑和额外的数据结构来跟踪顶点的唯一性。
def calculate_normals(self):
for i in range(len(self.indices) / (3)):
在Python中,当你尝试使用除法 / 来确定range函数的参数时,需要注意几个关键点。首先,range函数接受的参数必须是整数,因为range用于生成一个整数序列。如果你的self.indices是一个列表(或任何可迭代对象),并且你想要基于这个列表的长度来创建一个范围,同时你希望这个范围是列表长度除以3的整数部分(即向下取整),你应该使用整数除法//而不是浮点数除法/。
所以,正确的代码应该是:
for i in range(len(self.indices) // 3):
这样,len(self.indices) // 3会返回self.indices长度除以3的整数部分,确保range函数接收到的是一个整数参数。
举个例子,如果self.indices的长度是10,那么len(self.indices) // 3的结果是3,因为10除以3等于3余1,整数除法会忽略余数,只返回商3。因此,range(3)会生成一个从0到2的整数序列,你的循环就会按照这个序列来迭代。
File 3Drendering/simple.glsl¶
/* simple.glsl
simple diffuse lighting based on laberts cosine law; see e.g.:
http://en.wikipedia.org/wiki/Lambertian_reflectance
http://en.wikipedia.org/wiki/Lambert%27s_cosine_law
*/
---VERTEX SHADER-------------------------------------------------------
#ifdef GL_ES
precision highp float;
#endif
attribute vec3 v_pos;
attribute vec3 v_normal;
uniform mat4 modelview_mat;
uniform mat4 projection_mat;
varying vec4 normal_vec;
varying vec4 vertex_pos;
void main (void) {
//compute vertex position in eye_space and normalize normal vector
vec4 pos = modelview_mat * vec4(v_pos,1.0);
vertex_pos = pos;
normal_vec = vec4(v_normal,0.0);
gl_Position = projection_mat * pos;
}
---FRAGMENT SHADER-----------------------------------------------------
#ifdef GL_ES
precision highp float;
#endif
varying vec4 normal_vec;
varying vec4 vertex_pos;
uniform mat4 normal_mat;
void main (void){
//correct normal, and compute light vector (assume light at the eye)
vec4 v_normal = normalize( normal_mat * normal_vec ) ;
vec4 v_light = normalize( vec4(0,0,0,1) - vertex_pos );
//reflectance based on lamberts law of cosine
float theta = clamp(dot(v_normal, v_light), 0.0, 1.0);
gl_FragColor = vec4(theta, theta, theta, 1.0);
}
monkey.obj
# Blender v2.65 (sub 1) OBJ File: ''
# www.blender.org
mtllib monkey.mtl
o Suzanne
v 0.477241 0.205729 0.676920
v -0.507134 0.205729 0.676920
v 0.543648 0.178386 0.581217
v -0.573540 0.178386 0.581217
v 0.422554 0.059245 0.606607
v -0.452446 0.059245 0.606607
v 0.395210 0.125651 0.694498
v -0.425102 0.125651 0.694498
v 0.279976 0.125651 0.715982
v -0.309868 0.125651 0.715982
v 0.250679 0.059245 0.637857
v -0.280571 0.059245 0.637857
v 0.129585 0.178386 0.653482
v -0.159477 0.178386 0.653482
v 0.199898 0.205729 0.725748
v -0.229790 0.205729 0.725748
v 0.199898 0.320964 0.725748
v -0.229790 0.320964 0.725748
v 0.129585 0.348308 0.653482
v -0.159477 0.348308 0.653482
v 0.250679 0.469401 0.637857
v -0.280571 0.469401 0.637857
v 0.279976 0.402995 0.715982
v -0.309868 0.402995 0.715982
v 0.395210 0.402995 0.694498
v -0.425102 0.402995 0.694498
v 0.422554 0.469401 0.606607
v -0.452446 0.469401 0.606607
v 0.543648 0.348308 0.581217
v -0.573540 0.348308 0.581217
v 0.477241 0.320964 0.676920
v -0.507134 0.320964 0.676920
v 0.442085 0.307292 0.725748
v -0.471977 0.307292 0.725748
v 0.381538 0.369792 0.739420
v -0.411430 0.369792 0.739420
v 0.295601 0.369792 0.756998
v -0.325493 0.369792 0.756998
v 0.237007 0.307292 0.764810
v -0.266899 0.307292 0.764810
v 0.237007 0.221354 0.764810
v -0.266899 0.221354 0.764810
v 0.295601 0.162761 0.756998
v -0.325493 0.162761 0.756998
v 0.381538 0.162761 0.739420
v -0.411430 0.162761 0.739420
v 0.442085 0.221354 0.725748
v -0.471977 0.221354 0.725748
v 0.409533 0.233724 0.750488
v -0.439425 0.233724 0.750488
v 0.367866 0.192058 0.760904
v -0.397759 0.192058 0.760904
v 0.307971 0.192058 0.773925
v -0.337863 0.192058 0.773925
v 0.266304 0.233724 0.779133
v -0.296196 0.233724 0.779133
v 0.266304 0.293620 0.779133
v -0.296196 0.293620 0.779133
v 0.307971 0.337891 0.773925
v -0.337863 0.337891 0.773925
v 0.367866 0.337891 0.760904
v -0.397759 0.337891 0.760904
v 0.409533 0.293620 0.750488
v -0.439425 0.293620 0.750488
v 0.070991 -0.936849 0.557779
v -0.100884 -0.936849 0.557779
v 0.211616 -0.919271 0.542154
v -0.241509 -0.919271 0.542154
v 0.283882 -0.872396 0.544107
v -0.313774 -0.872396 0.544107
v 0.293648 -0.757161 0.569498
v -0.323540 -0.757161 0.569498
v 0.266304 -0.550130 0.590982
v -0.296196 -0.550130 0.590982
v 0.276070 -0.098958 0.600748
v -0.305962 -0.098958 0.600748
v 0.506538 -0.022786 0.548014
v -0.536430 -0.022786 0.548014
v 0.686226 0.111979 0.508951
v -0.716118 0.111979 0.508951
v 0.774116 0.309245 0.530435
v -0.804009 0.309245 0.530435
v 0.735054 0.445964 0.606607
v -0.764946 0.445964 0.606607
v 0.567085 0.531901 0.665201
v -0.596977 0.531901 0.665201
v 0.375679 0.656901 0.719889
v -0.405571 0.656901 0.719889
v 0.233101 0.703776 0.751139
v -0.262993 0.703776 0.751139
v 0.115913 0.584636 0.756998
v -0.145805 0.584636 0.756998
v 0.026070 0.445964 0.745279
v -0.055962 0.445964 0.745279
v 0.164741 0.502604 0.762857
v -0.194634 0.502604 0.762857
v 0.258491 0.570964 0.753092
v -0.288384 0.570964 0.753092
v 0.362007 0.545573 0.729654
v -0.391899 0.545573 0.729654
v 0.524116 0.463542 0.682779
v -0.554009 0.463542 0.682779
v 0.653023 0.385417 0.630045
v -0.682915 0.385417 0.630045
v 0.668648 0.285808 0.594889
v -0.698540 0.285808 0.594889
v 0.600288 0.147136 0.592935
v -0.630180 0.147136 0.592935
v 0.455757 0.041667 0.624185
v -0.485649 0.041667 0.624185
v 0.260445 0.010417 0.688639
v -0.290337 0.010417 0.688639
v 0.108101 0.065104 0.714029
v -0.137993 0.065104 0.714029
v 0.082710 0.395183 0.756998
v -0.112602 0.395183 0.756998
v 0.049507 0.289714 0.733560
v -0.079399 0.289714 0.733560
v 0.059273 0.172526 0.706217
v -0.089165 0.172526 0.706217
v 0.041695 -0.891927 0.620279
v -0.071587 -0.891927 0.620279
v 0.129585 -0.870442 0.624185
v -0.159477 -0.870442 0.624185
v 0.166695 -0.802083 0.641764
v -0.196587 -0.802083 0.641764
v 0.149116 -0.550130 0.676920
v -0.179009 -0.550130 0.676920
v 0.170601 -0.712239 0.661295
v -0.200493 -0.712239 0.661295
v 0.026070 -0.356771 0.702310
v -0.055962 -0.356771 0.702310
v 0.033882 -0.544271 0.698404
v -0.063774 -0.544271 0.698404
v 0.041695 -0.692708 0.690592
v -0.071587 -0.692708 0.690592
v 0.094429 -0.233724 0.723795
v -0.124321 -0.233724 0.723795
v 0.102241 -0.163411 0.723795
v -0.132134 -0.163411 0.723795
v 0.047554 -0.116536 0.717935
v -0.077446 -0.116536 0.717935
v -0.005180 -0.141927 0.723795
v -0.024712 -0.141927 0.723795
v 0.029976 -0.282552 0.717935
v -0.059868 -0.282552 0.717935
v 0.028023 -0.263021 0.749185
v -0.057915 -0.263021 0.749185
v 0.006538 -0.145833 0.760904
v -0.036430 -0.145833 0.760904
v 0.057320 -0.120442 0.753092
v -0.087212 -0.120442 0.753092
v 0.096382 -0.165364 0.760904
v -0.126274 -0.165364 0.760904
v 0.088570 -0.223958 0.758951
v -0.118462 -0.223958 0.758951
v 0.047554 -0.163411 0.776529
v -0.077446 -0.163411 0.776529
v 0.031929 -0.222005 0.772623
v -0.061821 -0.222005 0.772623
v 0.041695 -0.065755 0.712076
v -0.071587 -0.065755 0.712076
v 0.113960 -0.159505 0.710123
v -0.143852 -0.159505 0.710123
v 0.123726 -0.247396 0.684732
v -0.153618 -0.247396 0.684732
v 0.123726 -0.352864 0.684732
v -0.153618 -0.352864 0.684732
v 0.225288 -0.356771 0.592935
v -0.255180 -0.356771 0.592935
v 0.194038 -0.259114 0.589029
v -0.223930 -0.259114 0.589029
v 0.166695 -0.175130 0.616373
v -0.196587 -0.175130 0.616373
v 0.035835 -0.729817 0.684732
v -0.065727 -0.729817 0.684732
v 0.088570 -0.759114 0.676920
v -0.118462 -0.759114 0.676920
v 0.065132 -0.831380 0.657389
v -0.095024 -0.831380 0.657389
v 0.012398 -0.858724 0.645670
v -0.042290 -0.858724 0.645670
v 0.008491 -0.843099 0.616373
v -0.038384 -0.843099 0.616373
v 0.055366 -0.817708 0.624185
v -0.085259 -0.817708 0.624185
v 0.078804 -0.761067 0.641764
v -0.108696 -0.761067 0.641764
v 0.031929 -0.741536 0.647623
v -0.061821 -0.741536 0.647623
v 0.020210 -0.790364 0.602701
v -0.050102 -0.790364 0.602701
v 0.063179 -0.784505 0.602050
v -0.093071 -0.784505 0.602050
v 0.149116 0.201823 0.721842
v -0.179009 0.201823 0.721842
v 0.137398 0.277995 0.727701
v -0.167290 0.277995 0.727701
v 0.154976 0.367839 0.731607
v -0.184868 0.367839 0.731607
v 0.180366 0.145183 0.717935
v -0.210259 0.145183 0.717935
v 0.279976 0.090495 0.698404
v -0.309868 0.090495 0.698404
v 0.414741 0.080729 0.665201
v -0.444634 0.080729 0.665201
v 0.528023 0.156901 0.635904
v -0.557915 0.156901 0.635904
v 0.592476 0.262370 0.622232
v -0.622368 0.262370 0.622232
v 0.582710 0.348308 0.630045
v -0.612602 0.348308 0.630045
v 0.488960 0.410808 0.669107
v -0.518852 0.410808 0.669107
v 0.363960 0.455729 0.704264
v -0.393852 0.455729 0.704264
v 0.281929 0.469401 0.714029
v -0.311821 0.469401 0.714029
v 0.209663 0.440104 0.727701
v -0.239555 0.440104 0.727701
v 0.235054 0.408854 0.725748
v -0.264946 0.408854 0.725748
v 0.291695 0.434245 0.717935
v -0.321587 0.434245 0.717935
v 0.362007 0.426433 0.714029
v -0.391899 0.426433 0.714029
v 0.467476 0.389323 0.680826
v -0.497368 0.389323 0.680826
v 0.543648 0.334636 0.639810
v -0.573540 0.334636 0.639810
v 0.551460 0.264323 0.633951
v -0.581352 0.264323 0.633951
v 0.500679 0.176433 0.649576
v -0.530571 0.176433 0.649576
v 0.406929 0.111979 0.678873
v -0.436821 0.111979 0.678873
v 0.289741 0.115886 0.708170
v -0.319634 0.115886 0.708170
v 0.199898 0.160808 0.721842
v -0.229790 0.160808 0.721842
v 0.190132 0.352214 0.725748
v -0.220024 0.352214 0.725748
v 0.170601 0.279948 0.723795
v -0.200493 0.279948 0.723795
v 0.174507 0.213542 0.719889
v -0.204399 0.213542 0.719889
v 0.028023 0.467448 0.631998
v -0.057915 0.467448 0.631998
v 0.115913 0.604167 0.639810
v -0.145805 0.604167 0.639810
v 0.237007 0.727214 0.631998
v -0.266899 0.727214 0.631998
v 0.393257 0.670573 0.598795
v -0.423149 0.670573 0.598795
v 0.576851 0.543620 0.546060
v -0.606743 0.543620 0.546060
v 0.746773 0.463542 0.499185
v -0.776665 0.463542 0.499185
v 0.799507 0.307292 0.424967
v -0.829399 0.307292 0.424967
v 0.694038 0.088542 0.399576
v -0.723930 0.088542 0.399576
v 0.512398 -0.048177 0.444498
v -0.542290 -0.048177 0.444498
v 0.061226 -0.481771 0.260904
v -0.091118 -0.481771 0.260904
v 0.051460 -0.647786 0.303873
v -0.081352 -0.647786 0.303873
v 0.061226 -0.850911 0.358560
v -0.091118 -0.850911 0.358560
v 0.070991 -0.948567 0.464029
v -0.100884 -0.948567 0.464029
v 0.235054 -0.923177 0.434732
v -0.264946 -0.923177 0.434732
v 0.313179 -0.845052 0.415201
v -0.343071 -0.845052 0.415201
v 0.299507 -0.679036 0.424967
v -0.329399 -0.679036 0.424967
v 0.186226 -0.606771 0.331217
v -0.216118 -0.606771 0.331217
v 0.215523 -0.811849 0.352701
v -0.245415 -0.811849 0.352701
v 0.182320 -0.430989 0.309732
v -0.212212 -0.430989 0.309732
v 0.272163 -0.475911 0.440592
v -0.302055 -0.475911 0.440592
v 0.215523 -0.247396 0.458170
v -0.245415 -0.247396 0.458170
v 0.240913 -0.325521 0.446451
v -0.270805 -0.325521 0.446451
v 0.197945 -0.188802 0.477701
v -0.227837 -0.188802 0.477701
v 0.305366 -0.128255 0.471842
v -0.335259 -0.128255 0.471842
v 0.154976 -0.034505 -0.719565
v -0.184868 -0.034505 -0.719565
v 0.145210 -0.239583 -0.500815
v -0.175102 -0.239583 -0.500815
v 0.112007 -0.366536 -0.110190
v -0.141899 -0.366536 -0.110190
v 0.082710 -0.417317 0.178873
v -0.112602 -0.417317 0.178873
v 0.195991 -0.339192 0.270670
v -0.225884 -0.339192 0.270670
v 0.725288 0.108073 0.184732
v -0.755180 0.108073 0.184732
v 0.184273 0.301433 -0.805502
v -0.214165 0.301433 -0.805502
v 0.211616 0.936198 0.049967
v -0.241509 0.936198 0.049967
v 0.211616 0.940104 -0.313315
v -0.241509 0.940104 -0.313315
v 0.213570 0.711589 -0.664877
v -0.243462 0.711589 -0.664877
v 0.694038 0.449870 0.348795
v -0.723930 0.449870 0.348795
v 0.684273 0.551433 0.155435
v -0.714165 0.551433 0.155435
v 0.703804 0.678386 -0.076986
v -0.733696 0.678386 -0.076986
v 0.703804 0.666667 -0.323080
v -0.733696 0.666667 -0.323080
v 0.692085 0.473308 -0.500815
v -0.721977 0.473308 -0.500815
v 0.528023 0.598308 -0.573080
v -0.557915 0.598308 -0.573080
v 0.531929 0.826823 -0.317221
v -0.561821 0.826823 -0.317221
v 0.531929 0.828776 -0.037924
v -0.561821 0.828776 -0.037924
v 0.531929 0.652995 0.206217
v -0.561821 0.652995 0.206217
v 0.549507 0.516276 0.395670
v -0.579399 0.516276 0.395670
v 0.213570 0.731120 0.337076
v -0.243462 0.731120 0.337076
v 0.266304 0.611979 0.549967
v -0.296196 0.611979 0.549967
v 0.248726 0.547526 0.497232
v -0.278618 0.547526 0.497232
v 0.021512 0.499349 0.549967
v -0.051404 0.499349 0.549967
v 0.772163 0.322917 0.262857
v -0.802055 0.322917 0.262857
v 0.793648 0.401042 0.073404
v -0.823540 0.401042 0.073404
v 0.803413 0.477214 -0.104330
v -0.833305 0.477214 -0.104330
v 0.781929 0.457683 -0.323080
v -0.811821 0.457683 -0.323080
v 0.320991 -0.247396 -0.084799
v -0.350884 -0.247396 -0.084799
v 0.526070 -0.114583 -0.082846
v -0.555962 -0.114583 -0.082846
v 0.529976 -0.057942 0.231607
v -0.559868 -0.057942 0.231607
v 0.303413 -0.173177 0.335123
v -0.333305 -0.173177 0.335123
v 0.263700 -0.261067 0.203613
v -0.293592 -0.261067 0.203613
v 0.268908 -0.143880 0.435383
v -0.298800 -0.143880 0.435383
v 0.613960 0.172526 -0.543783
v -0.643852 0.172526 -0.543783
v 0.459663 0.231120 -0.668783
v -0.489555 0.231120 -0.668783
v 0.522163 -0.055989 -0.381674
v -0.552055 -0.055989 -0.381674
v 0.373726 -0.138021 -0.434408
v -0.403618 -0.138021 -0.434408
v 0.373075 -0.003255 -0.627117
v -0.402967 -0.003255 -0.627117
v 0.947945 0.434245 -0.307455
v -0.977837 0.434245 -0.307455
v 1.100288 0.479167 -0.397299
v -1.130180 0.479167 -0.397299
v 1.244820 0.408855 -0.453940
v -1.274712 0.408855 -0.453940
v 1.262398 0.205729 -0.459799
v -1.292290 0.205729 -0.459799
v 1.125679 0.018230 -0.410971
v -1.155571 0.018230 -0.410971
v 0.903023 -0.067708 -0.266440
v -0.932915 -0.067708 -0.266440
v 0.930366 -0.013021 -0.297690
v -0.960259 -0.013021 -0.297690
v 1.102242 0.053386 -0.424643
v -1.132133 0.053386 -0.424643
v 1.209663 0.197917 -0.469565
v -1.239555 0.197917 -0.469565
v 1.199898 0.354167 -0.463705
v -1.229790 0.354167 -0.463705
v 1.084663 0.408855 -0.412924
v -1.114555 0.408855 -0.412924
v 0.961616 0.375651 -0.332846
v -0.991509 0.375651 -0.332846
v 0.678413 -0.028646 -0.127768
v -0.708305 -0.028646 -0.127768
v 0.713570 -0.069661 -0.192221
v -0.743462 -0.069661 -0.192221
v 0.778023 0.147136 -0.041830
v -0.807915 0.147136 -0.041830
v 0.854195 0.365886 -0.260580
v -0.884087 0.365886 -0.260580
v 0.795601 -0.013021 -0.241049
v -0.825493 -0.013021 -0.241049
v 0.758491 0.024089 -0.270346
v -0.788384 0.024089 -0.270346
v 0.770210 0.078776 -0.295736
v -0.800102 0.078776 -0.295736
v 0.762398 0.147136 -0.280111
v -0.792290 0.147136 -0.280111
v 0.826851 0.246745 -0.284018
v -0.856743 0.246745 -0.284018
v 0.885445 0.319011 -0.289877
v -0.915337 0.319011 -0.289877
v 0.815132 0.305339 -0.211752
v -0.845024 0.305339 -0.211752
v 0.760445 0.160808 -0.172690
v -0.790337 0.160808 -0.172690
v 0.706408 0.025391 -0.187012
v -0.736300 0.025391 -0.187012
v 0.904976 0.287761 -0.348471
v -0.934868 0.287761 -0.348471
v 0.850288 0.225261 -0.338705
v -0.880180 0.225261 -0.338705
v 0.785835 0.152995 -0.340658
v -0.815727 0.152995 -0.340658
v 0.778023 0.108073 -0.340658
v -0.807915 0.108073 -0.340658
v 0.820991 0.069011 -0.340658
v -0.850884 0.069011 -0.340658
v 0.815132 0.020183 -0.340658
v -0.845024 0.020183 -0.340658
v 0.832710 0.002604 -0.311361
v -0.862602 0.002604 -0.311361
v 0.975288 0.336589 -0.395346
v -1.005180 0.336589 -0.395346
v 1.090523 0.363933 -0.467611
v -1.120415 0.363933 -0.467611
v 1.197945 0.319011 -0.508627
v -1.227837 0.319011 -0.508627
v 1.207710 0.188151 -0.510580
v -1.237602 0.188151 -0.510580
v 1.106148 0.065104 -0.473471
v -1.136040 0.065104 -0.473471
v 0.947945 0.010417 -0.360190
v -0.977837 0.010417 -0.360190
v 0.862007 0.086589 -0.369955
v -0.891899 0.086589 -0.369955
v 0.932320 0.137370 -0.389486
v -0.962212 0.137370 -0.389486
v 0.992866 0.199870 -0.412924
v -1.022758 0.199870 -0.412924
v 1.051460 0.246745 -0.428549
v -1.081352 0.246745 -0.428549
v 1.008492 0.301433 -0.424643
v -1.038383 0.301433 -0.424643
v 0.940132 0.252604 -0.391440
v -0.970024 0.252604 -0.391440
v 0.881538 0.192058 -0.373861
v -0.911430 0.192058 -0.373861
v 0.817085 0.133464 -0.366049
v -0.846977 0.133464 -0.366049
v 0.856148 0.031901 -0.354330
v -0.886040 0.031901 -0.354330
v 0.951851 0.063151 -0.391440
v -0.981743 0.063151 -0.391440
v 1.063179 0.119792 -0.457846
v -1.093071 0.119792 -0.457846
v 1.143257 0.201823 -0.481283
v -1.173149 0.201823 -0.481283
v 1.145210 0.287761 -0.483236
v -1.175102 0.287761 -0.483236
v 1.089221 0.335287 -0.473471
v -1.119113 0.335287 -0.473471
v 0.895210 -0.093099 -0.362143
v -0.925102 -0.093099 -0.362143
v 1.153023 0.000651 -0.489096
v -1.182915 0.000651 -0.489096
v 1.313179 0.201823 -0.514486
v -1.343071 0.201823 -0.514486
v 1.285835 0.418620 -0.516440
v -1.315727 0.418620 -0.516440
v 1.117867 0.492839 -0.485190
v -1.147758 0.492839 -0.485190
v 0.934273 0.445964 -0.397299
v -0.964165 0.445964 -0.397299
v 0.912788 0.172526 -0.465658
v -0.942680 0.172526 -0.465658
v 1.141304 0.238933 -0.557455
v -1.171196 0.238933 -0.557455
v 1.294950 0.293620 -0.569825
v -1.324842 0.293620 -0.569825
v 0.820991 0.365886 -0.358236
v -0.850884 0.365886 -0.358236
v 0.750679 0.149089 -0.438315
v -0.780571 0.149089 -0.438315
v 0.684273 -0.079427 -0.305502
v -0.714165 -0.079427 -0.305502
v 0.448921 0.218425 0.709635
v 0.445015 0.157390 0.684244
v 0.513374 0.190104 0.632486
v 0.488960 0.262858 0.673990
v -0.474907 0.157390 0.684244
v -0.478813 0.218425 0.709635
v -0.518852 0.262858 0.673990
v -0.543266 0.190104 0.632486
v 0.495796 0.106608 0.591471
v 0.570991 0.168620 0.526529
v 0.561226 0.262858 0.577310
v -0.525688 0.106608 0.591471
v -0.591118 0.262858 0.577310
v -0.600884 0.168620 0.526529
v 0.409859 0.087565 0.654947
v 0.336616 0.041667 0.623209
v 0.434273 0.035808 0.553873
v -0.366509 0.041667 0.623209
v -0.439751 0.087565 0.654947
v -0.464165 0.035808 0.553873
v 0.383980 0.156413 0.723307
v 0.337105 0.113933 0.705728
v -0.366997 0.113933 0.705728
v -0.413872 0.156413 0.723307
v 0.292671 0.156413 0.740885
v 0.231636 0.157390 0.723307
v 0.263863 0.087565 0.681803
v -0.261528 0.157390 0.723307
v -0.322563 0.156413 0.740885
v -0.293755 0.087565 0.681803
v 0.177437 0.106608 0.648600
v 0.238960 0.035808 0.589029
v -0.207329 0.106608 0.648600
v -0.268852 0.035808 0.589029
v 0.160835 0.190104 0.694010
v 0.112007 0.262858 0.654459
v 0.102241 0.168620 0.608560
v -0.141899 0.262858 0.654459
v -0.190727 0.190104 0.694010
v -0.132134 0.168620 0.608560
v 0.230659 0.218425 0.749185
v 0.188179 0.262858 0.725748
v -0.218071 0.262858 0.725748
v -0.260552 0.218425 0.749185
v 0.230659 0.309733 0.749185
v 0.231636 0.370769 0.723307
v 0.160835 0.335612 0.694010
v -0.261528 0.370769 0.723307
v -0.260552 0.309733 0.749185
v -0.190727 0.335612 0.694010
v 0.177437 0.421550 0.648600
v 0.102241 0.360026 0.608560
v -0.207329 0.421550 0.648600
v -0.132134 0.360026 0.608560
v 0.263863 0.439128 0.681803
v 0.336616 0.486979 0.623209
v 0.238960 0.496745 0.589029
v -0.366509 0.486979 0.623209
v -0.293755 0.439128 0.681803
v -0.268852 0.496745 0.589029
v 0.292671 0.375163 0.740885
v 0.337105 0.414714 0.705728
v -0.366997 0.414714 0.705728
v -0.322563 0.375163 0.740885
v 0.383980 0.375163 0.723307
v 0.445015 0.370769 0.684244
v 0.409859 0.439128 0.654947
v -0.474907 0.370769 0.684244
v -0.413872 0.375163 0.723307
v -0.439751 0.439128 0.654947
v 0.495796 0.421550 0.591471
v 0.434273 0.496745 0.553873
v -0.525688 0.421550 0.591471
v -0.464165 0.496745 0.553873
v 0.513374 0.335612 0.632486
v 0.570991 0.360026 0.526529
v -0.543266 0.335612 0.632486
v -0.600884 0.360026 0.526529
v 0.448921 0.309733 0.709635
v -0.478813 0.309733 0.709635
v 0.419136 0.345378 0.731119
v 0.435900 0.304851 0.735839
v 0.449898 0.263347 0.723795
v -0.449028 0.345378 0.731119
v -0.479790 0.263347 0.723795
v -0.465792 0.304851 0.735839
v 0.337593 0.378581 0.748697
v 0.379097 0.364746 0.749674
v -0.367485 0.378581 0.748697
v -0.408989 0.364746 0.749674
v 0.260445 0.345378 0.762857
v 0.297717 0.364746 0.767089
v -0.290337 0.345378 0.762857
v -0.327609 0.364746 0.767089
v 0.228218 0.263347 0.764810
v 0.241402 0.304851 0.774251
v -0.258110 0.263347 0.764810
v -0.271294 0.304851 0.774251
v 0.260445 0.186198 0.762857
v 0.241402 0.223470 0.774251
v -0.290337 0.186198 0.762857
v -0.271294 0.223470 0.774251
v 0.337593 0.153972 0.748697
v 0.297717 0.167155 0.767089
v -0.367485 0.153972 0.748697
v -0.327609 0.167155 0.767089
v 0.419136 0.186198 0.731119
v 0.379097 0.167155 0.749674
v -0.449028 0.186198 0.731119
v -0.408989 0.167155 0.749674
v 0.435900 0.223470 0.735839
v -0.465792 0.223470 0.735839
v 0.386096 0.216146 0.758300
v 0.404325 0.263021 0.753743
v -0.415988 0.216146 0.758300
v -0.434217 0.263021 0.753743
v 0.337268 0.195964 0.770019
v -0.367160 0.195964 0.770019
v 0.290393 0.216146 0.778482
v -0.320285 0.216146 0.778482
v 0.270210 0.263021 0.779784
v -0.300102 0.263021 0.779784
v 0.290393 0.312500 0.778482
v -0.320285 0.312500 0.778482
v 0.337268 0.333334 0.770019
v -0.367160 0.333334 0.770019
v 0.386096 0.312500 0.758300
v -0.415988 0.312500 0.758300
v 0.149116 -0.928548 0.549967
v 0.061714 -0.915853 0.590982
v -0.014946 -0.940755 0.561685
v 0.072945 -0.949544 0.516764
v -0.091606 -0.915853 0.590982
v -0.179009 -0.928548 0.549967
v -0.102837 -0.949544 0.516764
v 0.257027 -0.902669 0.538736
v 0.177437 -0.898274 0.586099
v 0.231148 -0.929036 0.491861
v -0.207329 -0.898274 0.586099
v -0.286919 -0.902669 0.538736
v -0.261040 -0.929036 0.491861
v 0.295113 -0.825032 0.555338
v 0.230171 -0.842122 0.598795
v 0.315620 -0.878255 0.481607
v -0.260063 -0.842122 0.598795
v -0.325005 -0.825032 0.555338
v -0.345512 -0.878255 0.481607
v 0.282906 -0.666341 0.582681
v 0.237495 -0.738118 0.623697
v 0.320503 -0.745442 0.502115
v -0.267387 -0.738118 0.623697
v -0.312798 -0.666341 0.582681
v -0.350395 -0.745442 0.502115
v 0.246284 -0.437337 0.594400
v 0.211616 -0.552083 0.644693
v 0.293159 -0.529622 0.521158
v -0.241509 -0.552083 0.644693
v -0.276177 -0.437337 0.594400
v -0.323052 -0.529622 0.521158
v 0.298042 -0.128743 0.519693
v 0.397163 -0.067220 0.566080
v 0.257515 -0.049153 0.671549
v 0.185249 -0.130696 0.626139
v -0.427055 -0.067220 0.566080
v -0.327934 -0.128743 0.519693
v -0.215141 -0.130696 0.626139
v -0.287407 -0.049153 0.671549
v 0.514839 -0.052571 0.493814
v 0.603218 0.036296 0.533365
v 0.487007 0.016765 0.595377
v -0.633110 0.036296 0.533365
v -0.544731 -0.052571 0.493814
v -0.516899 0.016765 0.595377
v 0.702827 0.087565 0.451334
v 0.746284 0.203288 0.499674
v 0.650093 0.139323 0.560221
v -0.776177 0.203288 0.499674
v -0.732719 0.087565 0.451334
v -0.679985 0.139323 0.560221
v 0.807808 0.308757 0.476725
v 0.770210 0.400065 0.574869
v 0.720406 0.303386 0.573892
v -0.800102 0.400065 0.574869
v -0.837700 0.308757 0.476725
v -0.750298 0.303386 0.573892
v 0.755562 0.465983 0.559244
v 0.667671 0.479167 0.633951
v 0.696968 0.415202 0.632975
v -0.697563 0.479167 0.633951
v -0.785454 0.465983 0.559244
v -0.726860 0.415202 0.632975
v 0.579292 0.550456 0.609049
v 0.460640 0.594401 0.695475
v 0.546577 0.499186 0.695963
v -0.490532 0.594401 0.695475
v -0.609184 0.550456 0.609049
v -0.576469 0.499186 0.695963
v 0.387886 0.681804 0.663248
v 0.302925 0.699870 0.738443
v 0.364448 0.607585 0.748697
v -0.332817 0.699870 0.738443
v -0.417778 0.681804 0.663248
v -0.394341 0.607585 0.748697
v 0.229195 0.736979 0.696939
v 0.169624 0.666179 0.757486
v 0.244331 0.643229 0.776041
v -0.199516 0.666179 0.757486
v -0.259087 0.736979 0.696939
v -0.274223 0.643229 0.776041
v 0.105171 0.610026 0.704264
v 0.069038 0.498210 0.752115
v 0.138863 0.543620 0.781900
v -0.098930 0.498210 0.752115
v -0.135063 0.610026 0.704264
v -0.168755 0.543620 0.781900
v 0.021675 0.468913 0.695475
v -0.014946 0.428386 0.741373
v 0.045113 0.415690 0.769693
v -0.051567 0.468913 0.695475
v -0.075005 0.415690 0.769693
v 0.189644 0.466472 0.733560
v 0.211616 0.549968 0.759439
v 0.120796 0.445476 0.762369
v -0.241509 0.549968 0.759439
v -0.219536 0.466472 0.733560
v -0.150688 0.445476 0.762369
v 0.272163 0.506511 0.719889
v 0.307808 0.568522 0.743326
v -0.337700 0.568522 0.743326
v -0.302055 0.506511 0.719889
v 0.430855 0.508464 0.710123
v 0.363472 0.488933 0.701822
v -0.460747 0.508464 0.710123
v -0.393364 0.488933 0.701822
v 0.609077 0.419597 0.653971
v 0.503609 0.431804 0.661783
v -0.638969 0.419597 0.653971
v -0.533501 0.431804 0.661783
v 0.668648 0.345866 0.610514
v 0.612007 0.361491 0.621256
v -0.698540 0.345866 0.610514
v -0.641899 0.361491 0.621256
v 0.647652 0.215983 0.587564
v 0.624214 0.268229 0.606607
v -0.677544 0.215983 0.587564
v -0.654106 0.268229 0.606607
v 0.533882 0.086589 0.606607
v 0.553902 0.148601 0.615396
v -0.563774 0.086589 0.606607
v -0.583794 0.148601 0.615396
v 0.364937 0.015300 0.650064
v 0.426948 0.060222 0.644205
v -0.394829 0.015300 0.650064
v -0.456841 0.060222 0.644205
v 0.166695 0.027019 0.717447
v 0.272163 0.062663 0.686197
v -0.196587 0.027019 0.717447
v -0.302055 0.062663 0.686197
v 0.156441 0.121257 0.709146
v 0.075386 0.116374 0.702310
v 0.061226 -0.003743 0.719400
v -0.105278 0.116374 0.702310
v -0.186333 0.121257 0.709146
v -0.091118 -0.003743 0.719400
v 0.056831 0.345378 0.747232
v 0.124214 0.380534 0.735025
v -0.154106 0.380534 0.735025
v -0.086723 0.345378 0.747232
v -0.014946 0.295573 0.741373
v 0.052925 0.231120 0.718912
v 0.103706 0.280925 0.724283
v -0.133598 0.280925 0.724283
v -0.082817 0.231120 0.718912
v 0.118843 0.191569 0.712076
v -0.014946 0.160808 0.704264
v -0.148735 0.191569 0.712076
v 0.021675 -0.870931 0.640299
v -0.014946 -0.894856 0.620279
v 0.091988 -0.883626 0.621256
v -0.051567 -0.870931 0.640299
v -0.121880 -0.883626 0.621256
v 0.086128 -0.845052 0.650064
v 0.154488 -0.845540 0.630533
v -0.116020 -0.845052 0.650064
v -0.184380 -0.845540 0.630533
v 0.112984 -0.768880 0.669107
v 0.170601 -0.753255 0.653482
v -0.142876 -0.768880 0.669107
v -0.200493 -0.753255 0.653482
v 0.133003 -0.438314 0.683756
v 0.087105 -0.546712 0.693033
v 0.164253 -0.653157 0.668131
v -0.116997 -0.546712 0.693033
v -0.162895 -0.438314 0.683756
v -0.194145 -0.653157 0.668131
v 0.102241 -0.692708 0.683267
v -0.132134 -0.692708 0.683267
v 0.028023 -0.304036 0.704264
v -0.014946 -0.361653 0.702310
v 0.027046 -0.437825 0.703287
v 0.070991 -0.350911 0.697916
v -0.057915 -0.304036 0.704264
v -0.100884 -0.350911 0.697916
v -0.056938 -0.437825 0.703287
v -0.014946 -0.543294 0.698404
v 0.040718 -0.640950 0.692545
v -0.070610 -0.640950 0.692545
v 0.039253 -0.716634 0.689127
v -0.014946 -0.697591 0.690592
v -0.069145 -0.716634 0.689127
v 0.106148 -0.202474 0.726725
v 0.094917 -0.229329 0.743326
v 0.068550 -0.259603 0.719400
v 0.099800 -0.239095 0.703287
v -0.124809 -0.229329 0.743326
v -0.136040 -0.202474 0.726725
v -0.129692 -0.239095 0.703287
v -0.098442 -0.259603 0.719400
v 0.082710 -0.130208 0.719400
v 0.102730 -0.161946 0.743814
v 0.103218 -0.164388 0.709635
v -0.132622 -0.161946 0.743814
v -0.112602 -0.130208 0.719400
v -0.133110 -0.164388 0.709635
v 0.012886 -0.120931 0.719400
v 0.055855 -0.113606 0.736490
v 0.040230 -0.107747 0.706705
v -0.085747 -0.113606 0.736490
v -0.042778 -0.120931 0.719400
v -0.070122 -0.107747 0.706705
v -0.014946 -0.156575 0.726725
v 0.002632 -0.139974 0.743814
v -0.014946 -0.144856 0.713053
v -0.032524 -0.139974 0.743814
v 0.030464 -0.274739 0.735514
v -0.014946 -0.293294 0.717935
v -0.060356 -0.274739 0.735514
v 0.064644 -0.242513 0.751627
v 0.027046 -0.245931 0.760904
v -0.014946 -0.273763 0.749185
v -0.094536 -0.242513 0.751627
v -0.056938 -0.245931 0.760904
v -0.014946 -0.160481 0.764810
v 0.017769 -0.155110 0.772623
v 0.029976 -0.124837 0.755045
v -0.047661 -0.155110 0.772623
v -0.059868 -0.124837 0.755045
v 0.053902 -0.137044 0.766764
v 0.081734 -0.133626 0.755045
v -0.083794 -0.137044 0.766764
v -0.111626 -0.133626 0.755045
v 0.079292 -0.167806 0.772623
v 0.099312 -0.200521 0.764322
v -0.109184 -0.167806 0.772623
v -0.129204 -0.200521 0.764322
v 0.069527 -0.220540 0.769205
v -0.099419 -0.220540 0.769205
v 0.039741 -0.193685 0.779459
v -0.069634 -0.193685 0.779459
v -0.014946 -0.223958 0.772623
v 0.088081 -0.108724 0.722330
v -0.014946 -0.046224 0.701334
v -0.117973 -0.108724 0.722330
v 0.124214 -0.208821 0.692057
v 0.134956 -0.159505 0.690592
v -0.154106 -0.208821 0.692057
v -0.164848 -0.159505 0.690592
v 0.120796 -0.290364 0.683756
v 0.157906 -0.255208 0.652017
v -0.150688 -0.290364 0.683756
v -0.187798 -0.255208 0.652017
v 0.177437 -0.356771 0.652994
v -0.207329 -0.356771 0.652994
v 0.251656 -0.347981 0.519205
v 0.206734 -0.300130 0.590006
v -0.236626 -0.300130 0.590006
v -0.281548 -0.347981 0.519205
v 0.217964 -0.257161 0.517252
v 0.182320 -0.221517 0.595865
v -0.212212 -0.221517 0.595865
v -0.247856 -0.257161 0.517252
v 0.193062 -0.190267 0.530924
v -0.222954 -0.190267 0.530924
v -0.014946 -0.739583 0.683756
v 0.032906 -0.736653 0.672525
v 0.074409 -0.727376 0.683756
v -0.104302 -0.727376 0.683756
v -0.062798 -0.736653 0.672525
v 0.081245 -0.760579 0.667154
v 0.083687 -0.801595 0.667154
v -0.113579 -0.801595 0.667154
v -0.111137 -0.760579 0.667154
v 0.057808 -0.824056 0.648111
v 0.039253 -0.849935 0.649576
v -0.069145 -0.849935 0.649576
v -0.087700 -0.824056 0.648111
v 0.009468 -0.850911 0.637369
v -0.014946 -0.860677 0.644693
v -0.039360 -0.850911 0.637369
v 0.031929 -0.834798 0.618326
v 0.011421 -0.826009 0.599283
v -0.014946 -0.845052 0.616373
v -0.061821 -0.834798 0.618326
v -0.041313 -0.826009 0.599283
v 0.072945 -0.792806 0.632486
v 0.057320 -0.806478 0.603027
v -0.102837 -0.792806 0.632486
v -0.087212 -0.806478 0.603027
v 0.067085 -0.738607 0.648111
v 0.074898 -0.766927 0.615234
v -0.096977 -0.738607 0.648111
v -0.104790 -0.766927 0.615234
v -0.014946 -0.749349 0.645670
v 0.028999 -0.755696 0.620767
v -0.058891 -0.755696 0.620767
v -0.014946 -0.795247 0.601724
v 0.048531 -0.784017 0.603515
v -0.078423 -0.784017 0.603515
v 0.162788 0.171061 0.718912
v 0.163277 0.207683 0.727213
v 0.140327 0.237468 0.725260
v -0.192680 0.171061 0.718912
v -0.170219 0.237468 0.725260
v -0.193169 0.207683 0.727213
v 0.157417 0.278483 0.731607
v 0.141792 0.321940 0.729654
v -0.171684 0.321940 0.729654
v -0.187309 0.278483 0.731607
v 0.176460 0.358073 0.733072
v 0.177437 0.409343 0.731607
v -0.207329 0.409343 0.731607
v -0.206352 0.358073 0.733072
v 0.215034 0.119792 0.713053
v 0.191109 0.152995 0.726725
v -0.244927 0.119792 0.713053
v -0.221001 0.152995 0.726725
v 0.353706 0.072429 0.680338
v 0.285347 0.104655 0.710611
v -0.383598 0.072429 0.680338
v -0.315239 0.104655 0.710611
v 0.470406 0.110515 0.651041
v 0.410835 0.099284 0.679361
v -0.500298 0.110515 0.651041
v -0.440727 0.099284 0.679361
v 0.573433 0.210612 0.6246


最低0.47元/天 解锁文章
16万+

被折叠的 条评论
为什么被折叠?



