- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将纹理应用于我的 .md2 模型。我使用 Gouraud 着色给它上色(底部/顶部平面三角形的标准算法),我必须使用类似的代码来处理纹理坐标 U 和 V。但我真的不明白如何对它们进行插值。从我的尝试来看,我的代码似乎只在边缘插入,而不是在它们之间插入。我错过了什么?
谢谢你。
这里的颜色由 u 为红色,v 为绿色,255 为蓝色(仅用于底部扁平三角形):
void Rasteriser::TfillBottomFlatTriangle(Vertex vertex1, Vertex vertex2, Vertex vertex3, COLORREF c1, COLORREF c2, COLORREF c3, HDC hdc)
{
float slope1 = (vertex2.GetX() - vertex1.GetX()) / (vertex2.GetY() - vertex1.GetY());
float slope2 = (vertex3.GetX() - vertex1.GetX()) / (vertex3.GetY() - vertex1.GetY());
//U and V
float slope1U = (vertex2.GetU() - vertex1.GetU()) / (vertex2.GetY() - vertex1.GetY());
float slope2U = (vertex3.GetU() - vertex1.GetU()) / (vertex3.GetY() - vertex1.GetY());
float slope1V = (vertex2.GetV() - vertex1.GetV()) / (vertex2.GetY() - vertex1.GetY());
float slope2V = (vertex3.GetV() - vertex1.GetV()) / (vertex3.GetY() - vertex1.GetY());
float x1 = vertex1.GetX();
float x2 = vertex1.GetX() + 0.5f;
//U and V
float x1U = vertex1.GetU();
float x2U = x1U;
float x1V = vertex1.GetV();
float x2V = x1V;
if (slope2 < slope1)
{
float slopeTmp = slope1;
slope1 = slope2;
slope2 = slopeTmp;
float slopeTmpU = slope1U;
slope1U = slope2U;
slope2U = slopeTmpU;
float slopeTmpV = slope1V;
slope1V = slope2V;
slope2V = slopeTmpV;
}
for (float scanlineY = vertex1.GetY(); scanlineY <= vertex2.GetY(); scanlineY++)
{
/* loop over each pixel of horizontal line */
for (float xPos = ceil(x1); xPos < x2; xPos++)
{
float t = (xPos - x1) / (x2 - x1);
float u = (1 - t) * x1U + t * x2U;
float v = (1 - t) * x1V + t * x2V;
COLORREF colour = _model.GetTexture().GetTextureValue((int)u, (int)v);
SetPixel(hdc, (int)xPos, (int)scanlineY, colour);
}
// get new x-coordinate of endpoints of horizontal line
x1 += slope1;
x2 += slope2;
x1U += slope1U;
x2U += slope2U;
x1V += slope1V;
x2V += slope2V;
}
}
最佳答案
问题在这里:
//U and V
float x1U = vertex1.GetU();
float x2U = vertex1.GetU() + 0.5f;
float x1V = vertex1.GetV();
float x2V = vertex1.GetV() + 0.5f;
0.5
是很多 uv 坐标,所以这告诉我这是错误的。
//U and V
float x1U = vertex1.GetU();
float x2U = x1U;
float x1V = vertex1.GetV();
float x2V = x1V;
快速健全性测试:对于初始
y
,我们有
x1U = Vertex1.u
和
x2U = Vertex1.u
。对于最后的
y
,我们有
x1U = Vertex2.u
和
x2U = Vertex3.u
对吗?
import numpy as np
p = np.array([[0,0],
[-5,10],
[10,10]],dtype=np.float)
uv = np.array([[0.1,0.6],
[0.2,0.5],
[0.3,0.4]])
slope = (p[[1,2],0] - p[0,0])/(p[[1,2],1] - p[0,1])
slope_uv = (uv[[1,2],:] - uv[0,:])/(p[[1,2],1] - p[0,1]).reshape(-1,1)
x1 = p[0,0]
x2 = p[0,0] + 0.5
uv1 = uv[0,:]
uv2 = np.copy(uv1)
result = []
for scanY in range(int(p[0,1]),int(p[1,1])):
for x in range(int(np.ceil(x1)),int(x2)):
t = (x-x1)/(x2-x1)
u = (1-t) * uv1 + t * uv2
result.append((x,scanY,u[0],u[1]))
x1 += slope[0]
x2 += slope[1]
uv1 += slope_uv[0,:]
uv2 += slope_uv[1,:]
#%%
R = np.array(result,dtype=float)
from matplotlib import pyplot as plt
plt.figure()
plt.subplot(2,1,1)
plt.scatter(R[:,0],R[:,1],c = R[:,2])
plt.title('u')
plt.colorbar()
plt.subplot(2,1,2)
plt.scatter(R[:,0],R[:,1],c = R[:,3])
plt.title('v')
plt.colorbar()
结果如下:
uv
值不正确。
COLORREF colour = _model.GetTexture().GetTextureValue((int)u, (int)v);
这没什么意义,因为
u,v
通常介于 0 和 1 之间。我认为您可能需要在调用 GetTextureValue 或乘以它之前除以纹理的大小。
关于c++ - 如何插入 UV 坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59347330/
我正在尝试实现凸多边形的正确纹理。我有一个带有 n 个三角形的多边形,对于每个三角形,我正在计算重心坐标,它们是每个三角形的 uv,但在每个三角形的 [0..1] 中,而不是整个多边形。如何插入每个
我目前正在开发一款 map 工具,可以为我的游戏生成自定义 map 。我的网格生成工作得很好,但我看不出如何正确地对我的脸进行 UV 贴图以使纹理保持一致。我已经通过使用相应的坐标对使 UV 贴图在地
我打算编写一个纹理图集管理器,但我遇到了问题。当我修改原始 UV 坐标时,我的程序不再渲染任何内容?这是我的抽奖代码: - (void)drawFrame { [(EAGLView *)self.vi
我有一个 3D 地形(体素网格,我的“任意网格”)。我知道如何从网格上方“拍打”纹理,但在垂直或陡峭的斜坡上它会弄脏。 我可以访问每个顶点的法线和位置。我将如何生成 UV(不使用着色器,因此没有真正的
我有几个 (3-4) 带(基本上是长三角形带),它们共享相同的纹理并且基本上从相同的位置开始。我通过将每一帧的偏移量添加到 V 坐标来垂直滚动该纹理。该偏移量只是我添加到每一帧的一个成员变量(是的,它
在 Android 上为 OpenGL 创建缓冲区时,有什么方法可以为 UV 使用与顶点不同的索引吗? 例如,如果您有 5000 个顶点和 12000 个 UV,并且不希望只为每个唯一的 UV 顶点对
Nginx: PV、UV、独立IP 做网站的都知道,平常经常要查询下网站PV、UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问
我有从二维形状生成三角形网格的代码。因为在大多数情况下这些形状在表面上的顶点分布不均匀,所以我在生成 UV 时遇到了问题,因此它不会导致纹理失真。任何人都可以推荐一些讨论平面网格上 UV 计算技术的文
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
我有一张 UV 贴图: 我想像这样在连接的网格边周围获取纹理像素(以红色选中): 如何使用 Python Blender API 做这样的事情? 最佳答案 制作“UV”bmesh 给定上面带有 UV
摘要 我正在尝试将位移贴图(高度贴图)应用于一个相当简单的对象(六角形平面),并且得到了一些意想不到的结果。我使用的是灰度,因此,我的印象是我的高度图应该只影响网格的 Z 值。然而,我创建的置换贴图在
我有一张 UV 贴图: 我想像这样在连接的网格边周围获取纹理像素(以红色选中): 如何使用 Python Blender API 做这样的事情? 最佳答案 制作“UV”bmesh 给定上面带有 UV
在对多重采样纹理进行采样时,我们必须使用整数坐标,即 ivec2 Texcoord = ivec2(textureSize(texsampler) * In.Texcoord); vec4 color
我正在尝试将纹理应用于我的 .md2 模型。我使用 Gouraud 着色给它上色(底部/顶部平面三角形的标准算法),我必须使用类似的代码来处理纹理坐标 U 和 V。但我真的不明白如何对它们进行插值。从
这个问题在这里已经有了答案: When is @uncheckedVariance needed in Scala, and why is it used in GenericTraversableT
我不知道“膨胀”是否是正确的术语,但这是我现在能想到的全部。我正在尝试沿着三角形 strip 映射一个 1 像素宽(尽管从技术上讲每个纹理都会有这个问题)的图像来模拟激光。当它完全均匀且正方形时,它看
我正在尝试为我在代码中生成的网格计算 uv。这是一个非常简单的圆圈 (2d) 我想像下面这样构造它 并将此代码用于 uvs uvs[i] = new Vector2((verts[i].x+radiu
我正在使用三个 v.73我有来自 raycaster 交叉点的 UV 坐标。我也有这个物体的纹理。我怎样才能在 UV 坐标处获得所用纹理的颜色(RGB 或 RGBA)? 我曾尝试使用从纹理中获取图像的
假设我们有一个 3D 网格,每个顶点都有纹理坐标,所以如果我渲染它展开,我会得到这样的东西(忽略红色方 block ): 现在我正在尝试找到合适的算法来使用顶点 UV 唯一标识这些区域并存储具有此唯一
我正在尝试在 Unity 中更改和调整放置在 bilt-in 立方体面上的纹理。没有任何问题,我设法用这段代码在每张脸上放置不同的图像: void Start() { Mesh mesh =
我是一名优秀的程序员,十分优秀!