- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个需要 3 个点的函数,我将使用这些点来绘制一个三角形,就好像我在使用 glVertex 函数一样。
但由于我想在避免透视变形的同时对这个三角形进行纹理贴图,我必须对其进行 segmentation ,并使用顶点进行纹理贴图和法线计算。
我设法为矩形、球体、圆柱体和圆环体做了这个,但我一辈子都想不出如何做三角形。
我设法找到的每个三角形映射示例都仅适用于 2D 空间和预定义点,使用 glVertex。
至于矩形,我使用的代码是这个:
void Rectangle::draw(float texS, float texT)
{
float x1, x2, y1, y2;
x1 = v.at(0); x2 = v.at(2);
y1 = v.at(1); y2 = v.at(3);
//glRectf(x1,y1,x2,y2);
int _numDivisions = 100;
float _xDim = abs(x2 - x1);
float _yDim = abs(y2 - y1);
float texMultiS, texMultiT;
texMultiS = _xDim / texS;// / _xDim;
texMultiT = _yDim / texT;// / _yDim;
glPushMatrix();
glTranslatef(x1, y1, 0);
glRotatef(-90.0,1,0,0);
glScalef( _xDim * (1.0/(double) _numDivisions), 1 , _yDim * (1.0/(double) _numDivisions));
glNormal3f(0,-1,0);
for (int bx = 0; bx<_numDivisions; bx++)
{
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f((bx * 1.0/_numDivisions) * texMultiS, 0.0 * texMultiT);
glVertex3f(bx+x1, 0, 0+y1);
for (int bz = 0; bz<_numDivisions; bz++)
{
glTexCoord2f(((bx+1) * 1.0/_numDivisions) * texMultiS, (bz * 1.0/_numDivisions) * texMultiT);
glVertex3f((bx + 1)+x1, 0, bz+y1);
glTexCoord2f(((bx+1) * 1.0/_numDivisions) * texMultiS, ((bz+1) * 1.0/_numDivisions) * texMultiT);
glVertex3f(bx+x1, 0, (bz + 1)+y1);
}
glTexCoord2f(((bx+1) * 1.0/_numDivisions) * texMultiS, 1.0 * texMultiT);
glVertex3d((bx+1)+x1, 0, _numDivisions+y1);
glEnd();
}
glPopMatrix();
}
我明白了。这很简单,因为它在二维空间中。我的目标是相同类型的逻辑,但目标是 3D 空间三角形。
但我无法弄清楚 3D 空间中三角形中的点所需的计算。
例如:
P1->(0,0,1); P2->(1,0,0); P3->(0,1,0);
目前我最好的想法是以P1为原点在二维空间中绘制它,我可以让P1->P2直线上的每个点都向P3收敛,然后根据x轴计算旋转的角度然后是在 y 轴上旋转的角度,但这真的是最好的方法吗?
编辑:
如下所示,改写问题的方法可能是:“如何在三个维度上 segmentation 一般三角形”?
由于目标是获得一种在 3D 空间中分段(三角形带或四边形带)构建三角形的算法,因此我可以使用顶点进行纹理映射和法线计算。
最佳答案
正如评论中所建议的那样,您可以切出一个与四边形非常相似的三角形。一些花哨的 ASCII 艺术:
/|
/ |
----
/| /|
/ |/ |
-------
/| /| /|
/ |/ |/ |
----------
/| /| /| /|
/ |/ |/ |/ |
-------------
将其分解为从下到上的三角形 strip ,我们将有 4 个 strip 。 4 strip 的三角形计数为:
1, 3, 5, 7
或 2 * i + 1
用于 strip i
,i
从 0
到 n - 1
。
要计算 segmentation 所需的顶点,可以通过对应的两个顶点之间的线性插值来计算沿底边的点。对于图中沿对角线的边缘的点也是如此。然后沿着每个 strip ,再次在相应的两个点之间进行线性插值,将 strip i
的左侧拆分为 i
block ,将右侧拆分为 i + 1
件。
关于c - 如何在三个维度上 segmentation 三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259893/
SDL3 提供了 SDL_RenderGeometry 函数绘制几何图形,用法和 OpenGL 差不多,先定义顶点数据,然后根据顶点数据绘制几何图形。 绘制三角形的代码如下: std::array
我想在图像上使用三角形类型按钮,但我无法执行此操作... 如何做到这一点? 最佳答案 这个project可以帮你。您可以自定义 UIButton 的形状。 关于iphone - 定制非矩形按钮 三角形
我一直在尝试找出如何使用 Python 制作彩虹三角螺旋。我可以制作一个方形螺旋,但它不会导入颜色。而且它不使用三角形。 输出应该是什么样子: 我取得的成就: 我的代码: import tur
我正在使用 this 研究三角形检测算法文章。我编写了这段代码,但不幸的是,当三角形之间存在交集时,该方法返回 false。 private boolean checkTriangleCollisio
我在资源文件中找到了几个关于如何在 Android 中绘制三角形的答案。但是我没有找到任何可以解释如何更改三角形旋转的内容。 我找到的例子:
对于编码类(class)中的作业,我应该找到一种方法让 Python 制作星号三角形,如下所示: x xx xxx 但是,无论我用我的代码做什么,我都无法做到这一点。最好的我可以得到的是:
我在绘制两个多边形时遇到问题。我想填充两个三角形,但一个大于第二个。我在 winforms 中使用 UserControl。代码: Point[] DOWN = new Point[] {new Po
如何测试三角形和正方形是否相交? 当我们知道它是正方形而不是矩形时,有什么方法可以优化它吗?此外,正方形是轴对齐的,这样应该可以进一步提升性能? 或者我应该把正方形分成三角形,然后对三角形-三角形相交
我有一个方法是画一个多边形,然后将多边形向右旋转90度,使其原来的顶点现在指向右边。 这是绘制多边形(三角形)的代码,但我不知道如何旋转它。 Point[] points = new Point[3]
我知道有高效的多边形裁剪算法(例如 Maillot、Vatti、Greiner-Hormann)。然而,这些算法适用于任意多边形,尽管它们适合我的情况,但在我看来,对像我这样的简单情况使用这种通用算法
我的问题可能很愚蠢,但我没有找到三角形 strip 使用的好例子: http://i.stack.imgur.com/KL8jk.png 像这样的顶点: A: -0.5f, -0.5f, // Bo
我正在尝试创建一个等边三角形,您可以在 fiddle 中看到它: 我的想法是,我将笔放在 (0, 0) 处,然后在 (20, 11) 处画线,但三角形看起来不正确。 最佳答案 您的三角形已被
通过编写一些逻辑代码,只是无法弄清楚如何以所需的形式获得 01 三角形的输出,三角形确实打印出来,但不是根据要求的输出。 import java.util.Scanner; import java
我一直在尝试制作一个简单的 pygame 程序来检查光标是否在三角形内部或外部。我通过找到较大三角形的面积,然后从鼠标位置到所有三个点制作三个内部三角形并找到它们的面积来完成此操作。 根据我的理解,如
我有一个方法 drawTriangle,它在 JAVA 中的 OpenGL 程序的 display() 方法中被引用。 public void drawTriangle(GL gl, int x1,
我正在尝试用 C++ 创建一个程序,该程序将数字的三角形模式放入二维数组中。 示例: 1 3 4 5 9 2 9 4 6 1 顶行是一个数字(整数),三角形的每一行比它上面的行多一
所以我最近一直在尝试学习 OpenGL,遵循了几个文本和视频教程。 我无法绘制三角形,我已经双重和三次检查我是否以正确的顺序执行了所有必要的步骤,但我显然遗漏了一些东西 在添加一些代码之前,我应该声明
我遇到了一个用递归绘制谢尔宾斯基三角形的程序。我如何解释这段代码是调用 sierpinski1 直到 n == 0,然后只绘制 3 个小三角形(每次调用一个三角形),因为 n == 0 是绘制某些东西
我有一个需要 3 个点的函数,我将使用这些点来绘制一个三角形,就好像我在使用 glVertex 函数一样。 但由于我想在避免透视变形的同时对这个三角形进行纹理贴图,我必须对其进行 segmentati
下面的代码应该为三角形添加一个 3d 对象,但我收到错误 Assets/Scripts/MakeTriangle.cs(6,28):错误 CS0120:需要对象引用才能访问非静态成员 `UnityEn
我是一名优秀的程序员,十分优秀!