- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基本程序,可以用 48 个四面体绘制一个立方体。更准确地说,它使用 27 个顶点和一个索引缓冲区来绘制这些四面体。我想将纹理应用于所有四面体,但我发现的所有关于纹理的教程都没有使用索引进行渲染,而且我程序中的每个顶点都用于其他 16 个四面体,所以我什至不知道如何定位纹理。该程序本身太长太乱,我无法发布,但如果有人可以告诉我是否可以将纹理放在索引基元上,并给我一个教程链接,我将不胜感激。
编辑:代码 ici:
void setVertices(FLOAT cubeYOffset, FLOAT cubeXOffset, FLOAT cubeZOffset, int tetraRender[]){
CUSTOMVERTEX vertices[] = {
{ cubeXOffset+1.0f, cubeYOffset+0.0f, cubeZOffset-1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 1.0f, },//Center top = 0
{ cubeXOffset+0.0f, cubeYOffset+0.0f, cubeZOffset-1.0f, -0.5f, 0.5f, 0.0f, -1.0f, 1.0f, },
{ cubeXOffset+0.0f, cubeYOffset+0.0f, cubeZOffset+0.0f, -0.5f, 0.5f, 0.5f, -1.0f, 1.0f, },
{ cubeXOffset+1.0f, cubeYOffset+0.0f, cubeZOffset+0.0f, 0.0f, 0.5f, 0.5f, 0.0f, 1.0f, },
{ cubeXOffset+2.0f, cubeYOffset+0.0f, cubeZOffset+0.0f, 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, },
{ cubeXOffset+2.0f, cubeYOffset+0.0f, cubeZOffset-1.0f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, },
{ cubeXOffset+2.0f, cubeYOffset+0.0f, cubeZOffset-2.0f, 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, },
{ cubeXOffset+1.0f, cubeYOffset+0.0f, cubeZOffset-2.0f, 0.0f, 0.5f, -0.5f, 0.0f, 1.0f, },
{ cubeXOffset+0.0f, cubeYOffset+0.0f, cubeZOffset-2.0f, -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, },
{ cubeXOffset+1.0f, cubeYOffset-1.0f, cubeZOffset-1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, },//Center middle = 9
{ cubeXOffset+0.0f, cubeYOffset-1.0f, cubeZOffset-1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, },
{ cubeXOffset+0.0f, cubeYOffset-1.0f, cubeZOffset+0.0f, -0.5f, 0.0f, 0.5f, -1.0f, 0.0f, },
{ cubeXOffset+1.0f, cubeYOffset-1.0f, cubeZOffset+0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, },
{ cubeXOffset+2.0f, cubeYOffset-1.0f, cubeZOffset+0.0f, 0.5f, 0.0f, 0.5f, 1.0f, 0.0f, },
{ cubeXOffset+2.0f, cubeYOffset-1.0f, cubeZOffset-1.0f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, },
{ cubeXOffset+2.0f, cubeYOffset-1.0f, cubeZOffset-2.0f, 0.5f, 0.0f, -0.5f, 1.0f, 0.0f, },
{ cubeXOffset+1.0f, cubeYOffset-1.0f, cubeZOffset-2.0f, 0.0f, 0.0f, -0.5f, 0.0f, 0.0f, },
{ cubeXOffset+0.0f, cubeYOffset-1.0f, cubeZOffset-2.0f, -0.5f, 0.0f, -0.5f, -1.0f, 0.0f, },
{ cubeXOffset+1.0f, cubeYOffset-2.0f, cubeZOffset-1.0f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, },//Center bottom = 18
{ cubeXOffset+0.0f, cubeYOffset-2.0f, cubeZOffset-1.0f, -0.5f, -0.5f, 0.0f, -1.0f, -1.0f, },
{ cubeXOffset+0.0f, cubeYOffset-2.0f, cubeZOffset+0.0f, -0.5f, -0.5f, 0.5f, -1.0f, -1.0f, },
{ cubeXOffset+1.0f, cubeYOffset-2.0f, cubeZOffset+0.0f, 0.0f, -0.5f, 0.5f, 0.0f, -1.0f, },
{ cubeXOffset+2.0f, cubeYOffset-2.0f, cubeZOffset+0.0f, 0.5f, -0.5f, 0.5f, 1.0f, -1.0f, },
{ cubeXOffset+2.0f, cubeYOffset-2.0f, cubeZOffset-1.0f, 0.5f, -0.5f, 0.0f, 1.0f, -1.0f, },
{ cubeXOffset+2.0f, cubeYOffset-2.0f, cubeZOffset-2.0f, 0.5f, -0.5f, -0.5f, 1.0f, -1.0f, },
{ cubeXOffset+1.0f, cubeYOffset-2.0f, cubeZOffset-2.0f, 0.0f, -0.5f, -0.5f, 0.0f, -1.0f, },
{ cubeXOffset+0.0f, cubeYOffset-2.0f, cubeZOffset-2.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, },//26(actually 27th)
};
d3ddev->CreateVertexBuffer(27*sizeof(CUSTOMVERTEX),
0,
CUSTOMFVF,
D3DPOOL_MANAGED,
&v_buffer,
NULL);
VOID* pVoid;
v_buffer->Lock(0, 0, (void**)&pVoid, 0);
memcpy(pVoid, vertices, sizeof(vertices));
v_buffer->Unlock();
short tetra[48][12] = {
//tetra 1
0, 1, 2,
0, 1, 11,
0, 2, 11,
1, 2, 11,
//tetro 2
0, 2, 3,
0, 2, 11,
0 , 3, 11,
2, 3, 11,
//tetro 3
0, 3, 4,
0, 3, 13,
0, 4, 13,
3, 4, 13,
//tetro 4
0, 4, 5,
0, 4, 13,
0, 5, 13,
4, 5, 13,
//tetro 5
0, 5, 6,
0, 5, 15,
0, 6, 15,
5, 6, 15,
//tetro 6
0, 6, 7,
0, 6, 15,
0, 7, 15,
6, 7, 15,
//tetro 7
0, 7, 8,
0, 7, 17,
0, 8, 17,
7, 8, 17,
//tetro 8
0, 8, 1,
0, 8, 17,
0, 1, 17,
8, 1, 17,
//tetro 9
0, 1, 11,
0, 1, 10,
0, 10, 11,
1, 10, 11,
//tetro 10
0, 3, 11,
0, 3, 12,
0, 11, 12,
3, 11, 12,
//tetro 11
0, 3, 13,
0, 3, 12,
0, 12, 13,
3, 12, 13,
//tetro 12
0, 5, 13,
0, 5, 14,
0, 13, 14,
5, 13, 14,
//tetro 13
0, 5, 15,
0, 5, 14,
0, 14, 15,
5, 14, 15,
//tetro 14
0, 7, 15,
0, 7, 16,
0, 15, 16,
7, 15, 16,
//tetro 15
0, 7, 17,
0, 7, 16,
0, 16, 17,
7, 16, 17,
//tetro 16
0, 1, 17,
0, 1, 10,
0, 17, 10,
1, 17, 10,
//tetro 17
0, 10, 11,
0, 9, 10,
0, 9, 11,
9, 10, 11,
//tetro 18
0, 11, 12,
0, 9, 11,
0, 9, 12,
9, 11, 12,
//tetro 19
0, 12, 13,
0, 9, 12,
0, 9, 13,
9, 12, 13,
//tetro 20
0, 13, 14,
0, 9, 13,
0, 9, 14,
9, 13, 14,
//tetro 21
0, 14, 15,
0, 9, 14,
0, 9, 15,
9, 14, 15,
//tetro 22
0, 15, 16,
0, 9, 15,
0, 9, 16,
9, 15, 16,
//tetro 23
0, 16, 17,
0, 9, 16,
0, 9, 17,
9, 16, 17,
//tetro 24
0, 17, 10,
0, 9, 17,
0, 9, 10,
9, 17, 10,
//tetro 17
9, 10, 11,
9, 18, 10,
9, 18, 11,
18, 10, 11,
//tetro 18
9, 11, 12,
9, 18, 11,
9, 18, 12,
18, 11, 12,
//tetro 19
9, 12, 13,
9, 18, 12,
9, 18, 13,
18, 12, 13,
//tetro 20
9, 13, 14,
9, 18, 13,
9, 18, 14,
18, 13, 14,
//tetro 21
9, 14, 15,
9, 18, 14,
9, 18, 15,
18, 14, 15,
//tetro 22
9, 15, 16,
9, 18, 15,
9, 18, 16,
18, 15, 16,
//tetro 23
9, 16, 17,
9, 18, 16,
9, 18, 17,
18, 16, 17,
//tetro 24
9, 17, 10,
9, 18, 17,
9, 18, 10,
18, 17, 10,
//tetro 9
18, 19, 11,
18, 19, 10,
18, 10, 11,
19, 10, 11,
//tetro 10
18, 21, 11,
18, 21, 12,
18, 11, 12,
21, 11, 12,
//tetro 11
18, 21, 13,
18, 21, 12,
18, 12, 13,
21, 12, 13,
//tetro 12
18, 23, 13,
18, 23, 14,
18, 13, 14,
23, 13, 14,
//tetro 13
18, 23, 15,
18, 23, 14,
18, 14, 15,
23, 14, 15,
//tetro 14
18, 25, 15,
18, 25, 16,
18, 15, 16,
25, 15, 16,
//tetro 15
18, 25, 17,
18, 25, 16,
18, 16, 17,
25, 16, 17,
//tetro 16
18, 19, 17,
18, 19, 10,
18, 17, 10,
19, 17, 10,
//tetro 19
18, 19, 20,
18, 19, 11,
18, 20, 11,
19, 20, 11,
//tetro 20
18, 20, 21,
18, 20, 11,
18 , 21, 11,
20, 21, 11,
//tetro 21
18, 21, 22,
18, 21, 13,
18, 22, 13,
21, 22, 13,
//tetro 22
18, 22, 23,
18, 22, 13,
18, 23, 13,
22, 23, 13,
//tetro 23
18, 23, 24,
18, 23, 15,
18, 24, 15,
23, 24, 15,
//tetro 24
18, 24, 25,
18, 24, 15,
18, 25, 15,
24, 25, 15,
//tetro 25
18, 25, 26,
18, 25, 17,
18, 26, 17,
25, 26, 17,
//tetro 26
18, 26, 19,
18, 26, 17,
18, 19, 17,
26, 19, 17,
};
short indices [576];
int i = 0;
int i2 = 0;
ind = 0;
int ic;
for(i; i < 48; i++){
if (tetraRender[i] == 1){
for(i2; i2 < 12; i2++){
if((ind == 0)&&(i2 == 0)){
ic = 0;
}else{
ic = ind*12+i2;
}
indices[ic] = tetra[i][i2];
}
i2 = 0;
ind++;
}
}
if (ind > 0) {
d3ddev->CreateIndexBuffer(12*ind*sizeof(short),
0,
D3DFMT_INDEX16,
D3DPOOL_MANAGED,
&i_buffer,
NULL);
i_buffer->Lock(0, 0, (void**)&pVoid, 0);
memcpy(pVoid, indices, 12*ind*2);
i_buffer->Unlock();
}
}
好的,这就是顶点和索引的声明,只是为了给你一个想法。它非常困惑,所以很抱歉,如果您看不到它的作用,那就是声明一组螺旋状的顶点,然后声明四面体的所有索引。然后它使用 from 函数中的 int 数组仅绘制指定的四面体。
是的,我正在使用 3D 照明,尽管我不知道为什么。
最佳答案
你不应该再使用 FVF 系统了。使用 IDirect3DVertexDeclaration9
系统,它实际上更加灵活。 FVF 的问题在于,当您将标志设置在一起时,顺序是无法指定的,而 VERTEXELEMENT9[] 系统能够指定元素的顺序以及包含哪些元素。
关于如何生成纹理坐标的简单答案非常简单——当你考虑一个顶点时,它在 3D 空间中的位置因此最终它的纹理坐标是固定的,不管它实际结束于哪个三角形一部分。因此,除非您打算模拟一些非常尖锐的边缘,在这种情况下您应该复制顶点,否则完全可以接受每个顶点一个纹理坐标,无需更多努力。
至于渲染系统不崩溃,那就是用着色器了,主要是因为固定功能已经死了,几乎所有的现代渲染都使用着色器,你必须很早以前学习过这个东西才能知道如何用它。幸运的是,基本纹理是基本的,不需要任何特别高级的东西。
D3DVERTEXELEMENT9 vertexDecl[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
struct CustomVertex {
float position[3];
float normal[3];
float texcoords[2];
};
IDirect3DVertexDeclaration9* vertexdecl;
d3ddev->CreateVertexDeclaration(vertexDecl, &vertexdecl);
至于着色器,那么一些非常简单的事情就可以了。
// Stuff we send to the shader from C++
// This is not per-vertex. Anything we loaded into the
// vertex data itself is input to the vertex shader.
// Direct3D 9.0c also supports hardware instancing, but I'll
// leave you to work that one out yourself.
// World * View * Projection matrix gives the result in Homogenous Clip
// Co-ordinates, which is what Direct3D wants from us as output
uniform extern float4x4 WVPMatrix;
// WorldInverseTranspose transforms the normal into world space
// successfully, even with non-linear transformations as the World
uniform extern float4x4 WorldInverseTransposeMatrix;
// This is just a 2D texture that we can change at any time
uniform extern texture MyTexture;
// The sampler state determines how the texture is filtered.
sampler TexS = sampler_state
{
Texture = <MyTexture>;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
// What we output from the vertex shader. This is basically the position
// of the vertex in HCC (the first two), and anything we want to pass into
// the pixel shader (the second two).
struct VS_OUTPUT {
float4 position : POSITION0;
float3 normal : NORMAL0;
float2 texcoords : TEXCOORD0;
};
// What we're putting in to the vertex shader. This is basically
// our vertex structure from C++.
struct VS_INPUT {
float3 position : POSITION0;
float3 normal : NORMAL0;
float2 texcoords : TEXCOORD0;
};
VS_OUTPUT VertexShader(VS_INPUT in) {
VS_OUTPUT out = (VS_OUTPUT)0;
// just pass texcoords on, we're not interested
out.texcoords = in.texcoords;
// get the resulting vertex position that we need
out.position = mul(float4(in.position, 1.0f), WVPMatrix);
// transform the normal into world space
out.normal = mul(float4(in.normal, 0.0f), WorldInverseTransposeMatrix).xyz;
}
float4 PixelShader(float3 normal : NORMAL0, float2 texcoords : TEXCOORD0) {
return tex2D(TexS, texcoords);
}
technique BasicShader
{
pass p0
{
vertexShader = compile vs_3_0 VertexShader();
pixelShader = compile ps_3_0 PixelShader();
}
}
我在这里没有做任何光照计算,但我确实将法线传递给了像素着色器。
关于c++ - 将纹理应用于索引基元。 C++ DX9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5845924/
我无法从主题做一个场景。 我安装了 DirectX 2009 年 3 月 9 日的 SDK,它是 9,“sub”-version c,但是“sub-sub”-version 是 41,所以库 (d3d
我的团队和我一直在努力解决我们在进入 Beta 版之前尝试混淆我们的 Android 应用程序时遇到的异常。 我们得到的异常是: Error:Uncaught translation error: c
我在将同事的 Android 源代码编译为 APK 时遇到问题。这是控制台中显示的错误 :app:transformClassesWithDexForDebug AGPBI: {"kind":"err
我最近在尝试为 Android 构建 apk 时遇到了我的 Azure CI 管道问题。 我收到以下错误: Build-tool 31.0.0 is missing DX at /usr/local/
我的 HelloWorld.java 中有以下代码: public class HelloWorld { public static void main(String[] args) {
我的 Android 应用程序使用了大量非常重要的外部库。这些库都是用 Java 编写的,并简单地添加到构建路径中。 从 Eclipse 中启动应用程序需要很长时间,大约 5 分钟。这非常令人沮丧!
所以我的问题有点简单。我有一个顶点缓冲区,我用创建它 pDevice->CreateVertexBuffer( m_dwCount * sizeof(CUSTOMVERTEX)
eclipse 中有没有办法将参数传递给 dx(--no-optimize 等)以提高 dx 处理速度? 最佳答案 创建少于 300 行的方法,在我创建了一个 2000 行的方法之前,在 Dx 处理中
有没有关于“dx”的文档? 我特别想知道 --core-library 选项的作用。 最佳答案 什么是“dx”工具? dx 工具将 Java 类文件转换为 *.dex(Dalvik 可执行文件)* 文
我目前正在为x86汇编学习考试。 我没有太多运气来搜索“:”,这太常见了标点符号:/ IDIV - Signed Integer Division Usage: IDIV src Modifies f
我有一个输出 jcamp-dx (*.jdx) 文件的仪器。有我可以用来查看数据的软件,但我宁愿用它做一些其他事情,比如在网页上绘制它,这在我必须访问数据的软件中是不允许的。 数据文件是纯文本,但它们
我正在尝试根据是否选中复选框来设置按钮的启用/禁用。下面是我的 javascript 和 asp 代码,它不起作用。我不确定是否根本没有调用该函数,或者我禁用按钮的方式有问题。 function O
我需要从命令行构建我的 android 应用程序(我正在使用 Java7 编译代码),但是当我尝试创建 dex 文件时出现以下错误 trouble processing: bad class file
我尝试使用这段代码缩放矩阵: D3DXMATRIX & rMatrix = m_Matrices[i]; D3DXMatrixScaling(&rMatrix, 2.0
最近我又回到了 C++ 中。我已经离开 C++/CLI 而使用 C# 至少一年了,我有点生疏了。我正在查看适用于 Windows 8 的 Direct3D 应用程序的基本示例,但找不到任何可以解释
当我在 eclipse ADT 中运行 android 应用程序时,“Dx 写入输出时遇到问题:已经准备好”出现在控制台中,然后应用程序照常运行。出现此消息的原因是什么?我该如何解决? 最佳答案 我遇
我想使用 C++ 进行插件开发。在开发 VST 或 DX 之间犹豫不决。有什么考虑?我知道有些主机更容易支持一种或另一种格式(Cubase:VSTs,Cakewalk:DXs),但这就是我所知道的。
我正在尝试根据类型可视化一些评分,但是我很难找到如何根据类型对系列进行分组。 图表选项如下: $scope.chartOptions = { dataSource: data,
如何为 d/d(n*x) 运算符生成模板? 我正在编写一个需要计算图像中线导数的程序。如果我们想计算关于 d/dx 的最简单的导数近似,我们可以运行以下操作: diff[x] = -1.0 * ima
我使用 dev extreme Angular 应用程序中的 UI 框架。 在文档中我找到了如何设置 focus 它说使用 method focus() 但是DxTextBoxComponent中没有
我是一名优秀的程序员,十分优秀!