Что-то с проекцией не то:
Треугольник равносторонний: (-0.5, -0.5, 0), (0.5, -0.5, 0), (0, 0.5, 0)
Клиентский код:
+
Код
#include <engine/platform.h>
#include <engine/renderer.h>
std::string vertexShaderSrc =
"\n\
attribute vec4 vertexPosition;\n\
uniform mat4 modelViewProj;\n\
void main()\n\
{\n\
gl_Position = modelViewProj * vertexPosition;\n\
}\n\
\0";
std::string fragmentShaderSrc =
"\n\
void main()\n\
{\n\
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);\n\
}\n\
\0";
struct Vertex
{
float x, y, z;
};
Vertex vertices[] = {
{-0.5f, -0.5f, 0},
{0.5f, -0.5f, 0},
{0.0f, 0.5f, 0},
};
unsigned short indices[] = {
0, 1, 2
};
int main()
{
Engine::Platform *platform = Engine::GetPlatform();
if (!platform->CreateMainWindow())
return -1;
Engine::Renderer *renderer = Engine::GetRenderer();
size_t size = vertexShaderSrc.size();
const Engine::Byte *pVertShaderData = reinterpret_cast<const Engine::Byte*>(vertexShaderSrc.data());
Engine::ByteVector vertexSrc(pVertShaderData, pVertShaderData + size);
size = fragmentShaderSrc.size();
const Engine::Byte *pFragShaderData = reinterpret_cast<const Engine::Byte*>(fragmentShaderSrc.data());
Engine::ByteVector fragSrc(pFragShaderData, pFragShaderData + size);
auto progId = renderer->CreateGpuProgram(Engine::STATIC_VERTEX, vertexSrc, fragSrc);
renderer->BindGpuProgram(progId);
const Engine::Byte *pVertData = reinterpret_cast<const Engine::Byte*>(vertices);
Engine::ByteVector verts(pVertData, pVertData + sizeof(vertices));
const Engine::Byte *pIndexData = reinterpret_cast<const Engine::Byte*>(indices);
Engine::ByteVector inds(pIndexData, pIndexData + sizeof(indices));
auto buffId = renderer->CreateHardwareBuffer(Engine::STATIC_VERTEX, verts, inds);
Engine::Matrix4 proj, model, modelViewProj;
proj.SetPerspective(1.3f, 1.78f, 1.0f, 100.0f);
model.SetTranslation(Engine::Vector3(0, 0, -1.5f));
modelViewProj = model * proj;
renderer->SetGpuProgramConstant(progId, "modelViewProj", modelViewProj);
platform->SetMainWindowSize(1280, 720, true);
renderer->SetViewport(1280, 720);
for (;;) {
if (!platform->UpdateMainWindow()) {
break;
}
renderer->BeginRenderFrame();
renderer->DrawHardwareBuffer(buffId);
renderer->EndRenderFrame();
}
renderer->DestroyHardwareBuffer(buffId);
renderer->DestroyGpuProgram(progId);
}
#include <engine/renderer.h>
std::string vertexShaderSrc =
"\n\
attribute vec4 vertexPosition;\n\
uniform mat4 modelViewProj;\n\
void main()\n\
{\n\
gl_Position = modelViewProj * vertexPosition;\n\
}\n\
\0";
std::string fragmentShaderSrc =
"\n\
void main()\n\
{\n\
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);\n\
}\n\
\0";
struct Vertex
{
float x, y, z;
};
Vertex vertices[] = {
{-0.5f, -0.5f, 0},
{0.5f, -0.5f, 0},
{0.0f, 0.5f, 0},
};
unsigned short indices[] = {
0, 1, 2
};
int main()
{
Engine::Platform *platform = Engine::GetPlatform();
if (!platform->CreateMainWindow())
return -1;
Engine::Renderer *renderer = Engine::GetRenderer();
size_t size = vertexShaderSrc.size();
const Engine::Byte *pVertShaderData = reinterpret_cast<const Engine::Byte*>(vertexShaderSrc.data());
Engine::ByteVector vertexSrc(pVertShaderData, pVertShaderData + size);
size = fragmentShaderSrc.size();
const Engine::Byte *pFragShaderData = reinterpret_cast<const Engine::Byte*>(fragmentShaderSrc.data());
Engine::ByteVector fragSrc(pFragShaderData, pFragShaderData + size);
auto progId = renderer->CreateGpuProgram(Engine::STATIC_VERTEX, vertexSrc, fragSrc);
renderer->BindGpuProgram(progId);
const Engine::Byte *pVertData = reinterpret_cast<const Engine::Byte*>(vertices);
Engine::ByteVector verts(pVertData, pVertData + sizeof(vertices));
const Engine::Byte *pIndexData = reinterpret_cast<const Engine::Byte*>(indices);
Engine::ByteVector inds(pIndexData, pIndexData + sizeof(indices));
auto buffId = renderer->CreateHardwareBuffer(Engine::STATIC_VERTEX, verts, inds);
Engine::Matrix4 proj, model, modelViewProj;
proj.SetPerspective(1.3f, 1.78f, 1.0f, 100.0f);
model.SetTranslation(Engine::Vector3(0, 0, -1.5f));
modelViewProj = model * proj;
renderer->SetGpuProgramConstant(progId, "modelViewProj", modelViewProj);
platform->SetMainWindowSize(1280, 720, true);
renderer->SetViewport(1280, 720);
for (;;) {
if (!platform->UpdateMainWindow()) {
break;
}
renderer->BeginRenderFrame();
renderer->DrawHardwareBuffer(buffId);
renderer->EndRenderFrame();
}
renderer->DestroyHardwareBuffer(buffId);
renderer->DestroyGpuProgram(progId);
}
Нука быстра, помогите найти в чем проблема, пожалуйста?