From 9df12e0fe1d05533734a51d47d23b37a899ac196 Mon Sep 17 00:00:00 2001 From: lukas Date: Sun, 6 Feb 2022 18:28:12 +0100 Subject: [PATCH] fix texture rendering --- assets/blocks/block.bmp | Bin 0 -> 12342 bytes block.bmp | Bin 12342 -> 0 bytes blocks/BlockRenderer.cpp | 109 ++++++++++++++++++++++++++++++--------- blocks/fragment.shader | 8 +-- blocks/geometry.shader | 4 ++ bmploader.cpp | 13 +++-- gl/Texture.cpp | 2 +- gl/VertexArray.cpp | 6 ++- main.cpp | 2 + 9 files changed, 108 insertions(+), 36 deletions(-) create mode 100644 assets/blocks/block.bmp delete mode 100644 block.bmp diff --git a/assets/blocks/block.bmp b/assets/blocks/block.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fc8b73d09eebe6f46b42ae90d8a4079c09173c6a GIT binary patch literal 12342 zcmdU#O>UG)5JWw`9TMr%+^8R`my>MN77#B40#h`?qEI z_xt0Qho6tfc>gKhzW)FA&%=jM@re1y&-s?d!^4m6@$&M5{Y@U2DW0F7Q@p*sy}!S| zzP>6Txo_$R7H~wY1f~t@N{}n@^z_82ZDTr!-y77GhD&X9d57q^S5}|Giua|>h;EQD66pZdI0dsNe@RcZobhQMrvlKCS`9o2eiTeUT5(<;mq zF|r@#H`T71vxK|0oh@K-jw;SC($q>vo4yVNv-QlkBXISz9Dfj$gcvX#Wn{a5jZ`PA z@L7g(Mzc6yK6>&N{XMSb>`=|>*u7*a*T_w}ZJ^)8wmJDj%*x}a!JOLnatpMV)^h9D zs?-{(Q+1R?D-b&U_QT6Gm=&PR>WcQpgl%L;3K0gxF-NQy$7G1K!g`dk5m(^1aGEfP z7S5@TE@-X@q45)6nbfy7D1S}s4%%?yEA!{~A8yx?KB>?;s(OGKZBvkgs3j{$ON@y> z5XHmHfsc{F95to71u#zpZ57VZ%8zLs4GtHrf~`+#Xl_RY+uAmwX2#V?eN)@D9Wg}pq7*lICr9Ne(76m#1Xy)$ z+CO?~1LZ1aY&F$oTBe#2(bRUs+MsKrXRMvtCM{Dqg!D?jxCI-wM0_Dn9zug@~Ay6(3+Z3 z-NLPTIaS-Js-xK<7-A;dX~yel)pq$hg6&=Hbwi|<;E>WzHC2<^iXrs}UO(&Yrt9Va zI>Jn$qpAm((KZEnBD78U6JMFsw>Bt$P3sQYaN;X-m;G&l)&9C0krqx92GPP=tAJ`_ z__a$jLQ|<3wL<0(6=nwGzp% zrubIN5g~a4#vC5C>M#O!uPh6s$TiH=5qlbgA7U8Qsg_%?9=WBC28Wc2fwz&S(8kP1 zQmwEbSyt6XFb%dNSSt+HBQGu5U~6g|-I8f?1+WRj+A53Wu_aGTZ9Cy%GI)u*caL889>^YyQ{ zpP#Ss=O6L&_y0e?z5O04J~99DXa1z|_V(}b=llETIPnX7kADAUovFvcTK|!%$610Q z>Pfd8s&1tcCTrrdO8HB82dLVyc1pI2mRFOAnh*5j9)gqDk0G^Vms5I7+zJM4@q8{N z@C(z9e!PEjO3yB86}*lx5js_U2`H@k{rn$k(sLr{Q5X}kPi-%$LowY?T(?&pn3)7s zD5E|a0Oy&w>;Y)Sv{d1i0l1u=lWkR+l&Dzv80{p}wuEUbGy2-+J?>IKJ|#0iKD=Dg{Dwf2`BdzTHTB?%92MQl-p; z`!ycgzIZzOk^7YX1%t75_;<4et#Ij?MpR8e_%OC^@~KiF{_gOXPGwFsD|Q$x1Y~Qr z(;#1XfBVmvy{(u|RsZgVWZR94+1^hZA~AaKaYA5*(EHU_UiHMJucYb2`{~a(&%465 z^VFVd;w(ZNb{!=d^sV-Gs{f}#HHocS^S)ZD%({z*xJz?fsY7bU;=h>w} z%qkSiX8rZ4d^(oOU<(`BGS$>notk6t$^F@2L930Y0;wxg9ZOZ9Iz(c0et*COLu4&+ z9WiC~G@X2ctsvD-)8sH^2&RY;n2t1(TBnoFs+z414RwUWVK^zsh6pDyGc6KN1zJ6= zt5s8*kyD{=&xksqt;e1Q^PJXMyxmAiiZ-IA@%mJ3*P05w!#cI#^wfyy2N7$?r}eZ< zn*8mw5i@x%g)oQ(UPi=IOl01F2^(*v5Q|csNombr- z{k4j9_1fwHn^00m>DQ$@uhW<7dR|>|!jQTJlX@&p)}1hV0KA%?r&$+b+H%5>1;+VQ t!Mc~{sXTQzNi2I diff --git a/blocks/BlockRenderer.cpp b/blocks/BlockRenderer.cpp index ef71562..cd5e646 100644 --- a/blocks/BlockRenderer.cpp +++ b/blocks/BlockRenderer.cpp @@ -10,40 +10,101 @@ #include VertexArray *BlockRenderer::setVertexArray() { + // float cube_vertices[] = { + // // front + // -1.0, -1.0, 1.0, 0.0f, 0.0f, + // 1.0, -1.0, 1.0, 1.0f, 0.0f, + // 1.0, 1.0, 1.0, 0.0f, 1.0f, + // -1.0, 1.0, 1.0, 1.0f, 1.0f, + // // back + // -1.0, -1.0, -1.0, 0.0f, 0.0f, + // 1.0, -1.0, -1.0, 1.0f, 0.0f, + // 1.0, 1.0, -1.0, 0.0f, 1.0f, + // -1.0, 1.0, -1.0, 1.0f, 1.0f, + // }; + float cube_vertices[] = { // front - -1.0, -1.0, 1.0, 0.0f, 0.0f, - 1.0, -1.0, 1.0, 1.0f, 0.0f, - 1.0, 1.0, 1.0, 0.0f, 1.0f, - -1.0, 1.0, 1.0, 1.0f, 1.0f, + -1, -1, 1, 0, 0, + 1, -1, 1, 1, 0, + 1, 1, 1, 0, 1, + -1, 1, 1, 1, 1, // back - -1.0, -1.0, -1.0, 0.0f, 0.0f, - 1.0, -1.0, -1.0, 1.0f, 0.0f, - 1.0, 1.0, -1.0, 0.0f, 1.0f, - -1.0, 1.0, -1.0, 1.0f, 1.0f, + -1, -1, -1, 0, 0, + 1, -1, -1, 1, 0, + 1, 1, -1, 0, 1, + -1, 1, -1, 1, 1, }; - GLfloat cube_colors[] = { - // front colors - 1.0, 0.0, 0.0, - 0.0, 1.0, 0.0, - 0.0, 0.0, 1.0, - 1.0, 1.0, 1.0, - // back colors - 1.0, 0.0, 0.0, - 0.0, 1.0, 0.0, - 0.0, 0.0, 1.0, - 1.0, 1.0, 1.0 - }; + float cubee[] = { + // face #1 + 1, 1, 1, 1, 0, + -1, 1, 1, 1, 1, + -1, -1, 1, 0, 1, + 1, -1, 1, 0, 0, + + // face #2 + 1, 1, 1, 1, 0, + 1, -1, 1, 1, 1, + 1, -1, -1, 0, 1, + 1, 1, -1, 0, 0, + + // face #3 + 1, 1, 1, 1, 0, + 1, 1, -1, 1, 1, + -1, 1, -1, 0, 1, + -1, 1, 1, 0, 0, + + // face #4 + -1, -1, -1, 1, 0, + -1, 1, -1, 1, 1, + 1, 1, -1, 0, 1, + 1, -1, -1, 0, 0, + + // face #5 + -1, -1, -1, 1, 0, + -1, -1, 1, 1, 1, + -1, 1, 1, 0, 1, + -1, 1, -1, 0, 0, + + // face #6 + -1, -1, -1, 1, 0, + 1, -1, -1, 1, 1, + 1, -1, 1, 0, 1, + -1, -1, 1, 0, 0,}; // Generate a vertex buffer - auto *vb = new VertexBuffer(cube_vertices, sizeof(cube_vertices)); - - // + auto *vb = new VertexBuffer(cubee, sizeof(cubee)); return new VertexArray(*vb); } IndexBuffer *BlockRenderer::setIndexBuffer() { + unsigned indexx[] = { + 0, 1, 2, + 2, 3, 0, + + 4, 5, 6, + 6, 7, 4, + + 8, 9, 10, + 10, 11, 8, + + 12, 13, 14, + 14, 15, 12, + + 16, 17, 18, + 18, 19, 16, + + 20, 21, 22, + 22, 23, 20, + + 24, 25, 26, + 26, 27, 24, + + 28, 29, 30, + 30, 31, 28 + }; + unsigned cube_elements[] = { // front 0, 1, 2, @@ -65,7 +126,7 @@ IndexBuffer *BlockRenderer::setIndexBuffer() { 6, 7, 3 }; - return new IndexBuffer(cube_elements, 36);; + return new IndexBuffer(indexx, 48); } Shader BlockRenderer::setShader() { diff --git a/blocks/fragment.shader b/blocks/fragment.shader index 8a74ec6..e52c309 100644 --- a/blocks/fragment.shader +++ b/blocks/fragment.shader @@ -5,7 +5,7 @@ uniform sampler2D u_texture; in vec3 normal; in vec4 pos; -in vec2 v_texcoords; +in vec2 texcoords; void main() { @@ -17,9 +17,9 @@ void main() // set light color vec3 diffuse = diff * vec3(1.0,1.0,1.0); - vec4 c = texture(u_texture, v_texcoords); + vec4 c = texture(u_texture, texcoords); vec3 result = (diffuse) * c.xyz; -// color = vec4(result,0.0); - color = c; + color = vec4(result,0.0); +// color = c; })"; \ No newline at end of file diff --git a/blocks/geometry.shader b/blocks/geometry.shader index d663c76..afcfba4 100644 --- a/blocks/geometry.shader +++ b/blocks/geometry.shader @@ -6,6 +6,9 @@ layout(triangle_strip, max_vertices=3) out; out vec3 normal; out vec4 pos; +in vec2 v_texcoords[]; +out vec2 texcoords; + void main( void ) { vec3 a = ( gl_in[1].gl_Position - gl_in[0].gl_Position ).xyz; @@ -17,6 +20,7 @@ void main( void ) gl_Position = gl_in[i].gl_Position; normal = N; pos = gl_in[i].gl_Position; + texcoords = v_texcoords[i]; EmitVertex( ); } diff --git a/bmploader.cpp b/bmploader.cpp index 42d223c..ff89f16 100644 --- a/bmploader.cpp +++ b/bmploader.cpp @@ -1,9 +1,10 @@ // // Created by lukas on 05.02.22. // - +#define GL_GLEXT_PROTOTYPES #include #include +#include #include "bmploader.h" unsigned bmploader::loadBMP(const char *imagepath) { @@ -54,18 +55,20 @@ unsigned bmploader::loadBMP(const char *imagepath) { // Create one OpenGL texture unsigned textureID; glGenTextures(1, &textureID); - + glActiveTexture(GL_TEXTURE0); // "Bind" the newly created texture : all future texture functions will modify this texture glBindTexture(GL_TEXTURE_2D, textureID); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); -// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // Give the image to OpenGL glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data); - + // Generate mipmaps, by the way. + glGenerateMipmap(GL_TEXTURE_2D); diff --git a/gl/Texture.cpp b/gl/Texture.cpp index 33fc84b..86c15c9 100644 --- a/gl/Texture.cpp +++ b/gl/Texture.cpp @@ -9,7 +9,7 @@ #include Texture::Texture() { - mTexturehandle = bmploader().loadBMP("../block.bmp"); + mTexturehandle = bmploader().loadBMP("../assets/blocks/block.bmp"); } void Texture::Bind() { diff --git a/gl/VertexArray.cpp b/gl/VertexArray.cpp index 5bd8ae3..e3b3c2a 100644 --- a/gl/VertexArray.cpp +++ b/gl/VertexArray.cpp @@ -13,13 +13,15 @@ VertexArray::VertexArray(const VertexBuffer& buff) { buff.Bind(); // generate new vertex array object - glGenVertexArrays(2, &handle); + glGenVertexArrays(1, &handle); + Bind(); // specify syntax of my data glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *) nullptr); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *) nullptr); glEnableVertexAttribArray(0); + + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *) 12); glEnableVertexAttribArray(1); } diff --git a/main.cpp b/main.cpp index cfeda65..ee43dd0 100644 --- a/main.cpp +++ b/main.cpp @@ -94,6 +94,8 @@ int main() { #endif glEnable(GL_DEPTH_TEST); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + GrasBlock gb(0, 0, 0); BaseBlock bb(0.0f, (float) rand() / RAND_MAX, 1.0f, 1, 0, 0);