gpt4 book ai didi

optimization - 如果你有三角形顶点,如何通过三角形内的任意 x,y 坐标找到 z

转载 作者:行者123 更新时间:2023-12-03 16:32:14 25 4
gpt4 key购买 nike

给定顶点 V1 (x1,y1,z1), V2 (x2,y2,z2), V3 (x3,y3,z3) 的三角形 T,如果我知道 (x,y) 位于三角形 Tp (x1, y1), (x2,y2), (x3,y3)

实际上,3D 中的三角形平面由方程定义:Ax+By+Cz+D=0,我可以找到 z = (D-Ax-By)/C问题是 A、B、C、D 在运行时计算起来太昂贵了:

A = y1(z2-z3) + y2(z3-z1) + y3(z1-z2)
B = z1(x2-x3) + z2(x3-x1) + z3(x1-x2)
C = x1(y2-y3) + x2(y3-y1) + x3(y1-y2)
D = -x1(y2*z3 – y3*z2) – x2(y3*z1 – y1*z3) – x3 (y1*z2 – y2*z1)

是否可以使用 opengl 着色器来计算 A、B、C、D?是否有优化的算法来查找平面系数?

最佳答案

该技术称为重心坐标,但维基页面很难理解 -参见 http://www.alecjacobson.com/weblog/?p=1596

float calcY(vec3 p1, vec3 p2, vec3 p3, float x, float z) {
float det = (p2.z - p3.z) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.z - p3.z);

float l1 = ((p2.z - p3.z) * (x - p3.x) + (p3.x - p2.x) * (z - p3.z)) / det;
float l2 = ((p3.z - p1.z) * (x - p3.x) + (p1.x - p3.x) * (z - p3.z)) / det;
float l3 = 1.0f - l1 - l2;

return l1 * p1.y + l2 * p2.y + l3 * p3.y;
}

代码来自 http://www.gamedev.net/topic/597393-getting-the-height-of-a-point-on-a-triangle/ - 小心计算机图形学与 Y Z 的数学使用

附言。我不知道有任何使用着色器的更快版本。一种快速的肮脏+解决方案是使用基于顶点高度的颜色渲染三角形,并在 X、Y 处选择像素颜色——实际上,这在台式机上永远不会更快,不知道 opengl -es

关于optimization - 如果你有三角形顶点,如何通过三角形内的任意 x,y 坐标找到 z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com