Quantcast
Channel: GameDev.net
Viewing all articles
Browse latest Browse all 17825

Triangle rotation on X and Y axis cuts out?

$
0
0
I am attempting to rotate a triangle around the X / Y axis, but for some reason I cannot get the triangle to display in some cases (screen is blank) Specific example: If I am trying to rotate around the Y axis and use 45 degrees nothing shows. BUT using -45 degrees I see my triangle rotated correctly If I am trying to rotate around the X axis and use 45 degrees nothing shows. BUT using -45 degrees I see my triangle rotated correctly Am I missing something? I don't understand why I can't see it one direction but the other is fine. I understand that back-face culling happens by default, but in this case I should be able to see the triangle because I have not gone past the back-face culling threshold //Vertex data used Vertex vertices[] = { { 0.0f, 0.0f, 1.0f, Color(1.0f, 0.0f, 0.0f, 1.0f) }, { 0.0f, 100.0f, 1.0f, Color(1.0f, 0.0f, 0.0f, 1.0f) }, { 100.0f, 100.0f, 1.0f, Color(1.0f, 0.0f, 0.0f, 1.0f) } }; //Matrix setup. Matrices are column-major //My Matrix4 class are Identity matrix by default Matrix4 model; model.rotateY(45); //rotate 45 degrees and disappear :( Same happens if the call is changed to rotateX Matrix4 view; Matrix4 projection; projection.makeOrthoLH(); //Using an orthogrpahic projection //Create the mvp Matrix4 mvp = projection * view * model; //Map the mvp matrix to the constant buffer D3D11_MAPPED_SUBRESOURCE mapResource; HRESULT mapped = deviceContext->Map(cbuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &mapResource); ((FLOAT*)mapResource.pData)[0] = mvp.data[0]; ((FLOAT*)mapResource.pData)[1] = mvp.data[1]; ((FLOAT*)mapResource.pData)[2] = mvp.data[2]; ((FLOAT*)mapResource.pData)[3] = mvp.data[3]; ((FLOAT*)mapResource.pData)[4] = mvp.data[4]; ((FLOAT*)mapResource.pData)[5] = mvp.data[5]; ((FLOAT*)mapResource.pData)[6] = mvp.data[6]; ((FLOAT*)mapResource.pData)[7] = mvp.data[7]; ((FLOAT*)mapResource.pData)[8] = mvp.data[8]; ((FLOAT*)mapResource.pData)[9] = mvp.data[9]; ((FLOAT*)mapResource.pData)[10] = mvp.data[10]; ((FLOAT*)mapResource.pData)[11] = mvp.data[11]; ((FLOAT*)mapResource.pData)[12] = mvp.data[12]; ((FLOAT*)mapResource.pData)[13] = mvp.data[13]; ((FLOAT*)mapResource.pData)[14] = mvp.data[14]; ((FLOAT*)mapResource.pData)[15] = mvp.data[15]; deviceContext->Unmap(cbuffer, NULL); makeOrthoLH method void Matrix4::makeOrthoLH() { //LH ORTHO hardcode in for 800x600, where near is 0.0f and far is 100.0f //------------------------------------ FLOAT w = 800.0f; FLOAT h = 600.0f; FLOAT n = 0.0f; FLOAT f = 100.0f; data[0] = 2.0f / w; data[1] = 0.0f; data[2] = 0.0f; data[3] = 0.0f; data[4] = 0.0f; data[5] = 2.0f / h; data[6] = 0.0f; data[7] = 0.0f; data[8] = 0.0f; data[9] = 0.0f; data[10] = 1 / (f - n); data[11] = 0.0f; data[12] = 0; data[13] = 0; data[14] = -n / (f-n); data[15] = 1.0f; } rotateY method void Matrix4::rotateY(FLOAT degrees) { FLOAT cosVal = cosf(degrees * PI/180.0f); FLOAT sinVal = sinf(degrees * PI/180.0f); FLOAT rot[16] = { cosVal, 0, -sinVal, 0, 0, 1, 0, 0, sinVal, 0, cosVal, 0, 0, 0, 0, 1 }; Matrix4 r(rot); data[0] = r.data[0]; data[1] = r.data[1]; data[2] = r.data[2]; data[3] = r.data[3]; data[4] = r.data[4]; data[5] = r.data[5]; data[6] = r.data[6]; data[7] = r.data[7]; data[8] = r.data[8]; data[9] = r.data[9]; data[10] = r.data[10]; data[11] = r.data[11]; data[12] = r.data[12]; data[13] = r.data[13]; data[14] = r.data[14]; data[15] = r.data[15]; } Shader being used cbuffer mvpBuffer : register(b0) { matrix mvp; }; struct VOut { float4 position : SV_POSITION; float4 color : COLOR; }; VOut VShader(float3 position : POSITION, float4 color : COLOR) { VOut output; output.position = mul(mvp, float4(position, 1.0f)); output.color = color; return output; } float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET { return color; }

Viewing all articles
Browse latest Browse all 17825

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>