Filament在C++中创建渲简单染体

为查找新引擎锯齿严重的问题,在C++端重写了简单DEMO,摸索阶段有点费事,记录下,以免后续需要。

int floatSize = 4;
int shortSize = 2;
int vertexCount = 4;
int byteStride = 7*4;
auto vertexBuffer = VertexBuffer::Builder()
.vertexCount(vertexCount)
.bufferCount(1)
.attribute(VertexAttribute::POSITION, 0, VertexBuffer::AttributeType::FLOAT3, 0, byteStride)
//.attribute(VertexAttribute::COLOR, 0, VertexBuffer::AttributeType::UBYTE4, 3*4, byteStride)
// .normalized(VertexAttribute::COLOR)
.attribute(VertexAttribute::TANGENTS, 0, VertexBuffer::AttributeType::FLOAT4, 3*floatSize, byteStride)
// .normalized(VertexAttribute::TANGENTS)
.build(*engine);
float *vertexData = new float[4*3+4*4];
for(int i=0;i<4;i++){
int x=i<2?-1:1;
int z=1;
if(i<1||i>2)
z=-1;


vertexData[i*7+0] = x;
vertexData[i*7+1] = 1;
vertexData[i*7+2] = 5000*z;

vertexData[i*7+3] = 0.0;
vertexData[i*7+4] = 0.7;
vertexData[i*7+5] = 0.7;
vertexData[i*7+6] = 0.0;
}

unsigned short *indexData = new unsigned short[6];
indexData[0]=0;
indexData[1]=1;
indexData[2]=2;

int indexCount = 3;
vertexBuffer->setBufferAt(*engine, 0, VertexBuffer::BufferDescriptor(vertexData, vertexCount * byteStride, nullptr));

auto indexBuffer = IndexBuffer::Builder()
.indexCount(indexCount)
.bufferType(IndexBuffer::IndexType::USHORT)
.build(*engine);

indexBuffer->setBuffer(*engine, IndexBuffer::BufferDescriptor(indexData, indexCount * 2, nullptr));

auto entity = EntityManager::get().create();
RenderableManager::Builder(1)
.boundingBox({{ -1000, -1000, -1000 }, { 1000, 1000, 1000 }})
.material(0, materialInstance)
.geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, indexCount)
.culling(false)
.receiveShadows(false)
.castShadows(false)
.build(*engine, laneNode->entity);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值