为了好玩,我正在尝试使用(现代)OpenGL构建一个微型Blender。作为其中的一部分,我希望用户能够选择顶点。每次用户选择顶点时,我都希望顶点变为红色。我的问题与找到相交的顶点无关,而是如何可视化拾取的顶点。 我已经设法在我的片段着色器中使用以下内容绘制拾取的三角形(而不是拾取的顶点):
{{1}}
其中intersectingFace是一个保持网格交叉面索引的制服。
为了选择一个顶点而不是一个面,我想到将一个球体网格加载到我的场景中,将其缩小并将其中心平移到交叉顶点的位置。我想知道是否有一个更简单的解决方案。
答案 0 :(得分:0)
有一个内置变量可以告诉你Vertex的索引,而不是原语:gl_VertexID。
gl_VertexID :当前正在处理的顶点的索引。
当 使用非索引渲染,它是当前的有效索引 顶点(处理的顶点数+第一个值)。对于 索引渲染,它是用于从中获取此顶点的索引 缓冲液中。注意:gl_VertexID将应用基础顶点。
因此,不是像现在这样设置相交面均匀值,而是可以对顶点索引执行相同操作,然后将其与#!/usr/bin/env python3
import sys
from fontTools.ttLib import TTFont
font = TTFont(sys.argv[1], 0, allowVID=0,
ignoreDecompileErrors=True,
fontNumber=0, lazy=True)
I_cp = ord('I')
M_cp = ord('M')
I_glyphid = None
M_glyphid = None
for table in font['cmap'].tables:
for codepoint, glyphid in table.cmap.items():
if codepoint == I_cp:
I_glyphid = glyphid
if M_glyphid: break
elif codepoint == M_cp:
M_glyphid = glyphid
if I_glyphid: break
if (not I_glyphid) or (not M_glyphid):
sys.stderr.write("Non-alphabetic font %s, giving up!\n" % sys.argv[1])
sys.exit(3)
glyphs = font.getGlyphSet()
i = glyphs[I_glyphid]
M = glyphs[M_glyphid]
if i.width == M.width:
sys.exit(0)
else:
sys.exit(1)
进行比较。