mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-03-21 07:23:31 +00:00
the whole game
This commit is contained in:
99
src/client/renderer/entity/PaintingRenderer.cpp
Executable file
99
src/client/renderer/entity/PaintingRenderer.cpp
Executable file
@@ -0,0 +1,99 @@
|
||||
#include "PaintingRenderer.h"
|
||||
#include "../../../world/entity/Painting.h"
|
||||
#include "../../../world/Direction.h"
|
||||
#include "../Tesselator.h"
|
||||
#include "../Textures.h"
|
||||
#include "../gles.h"
|
||||
|
||||
void PaintingRenderer::render( Entity* entity, float x, float y, float z, float rot, float a ) {
|
||||
glPushMatrix();
|
||||
glTranslatef(float(x), float(y), float(z));
|
||||
glRotatef(rot, 0, 1.0f, 0);
|
||||
//glEnable(GL_RESCALE_NORMAL);
|
||||
bindTexture("art/kz.png");
|
||||
Painting* painting = (Painting*)entity;
|
||||
const Motive* motive = painting->motive;
|
||||
|
||||
float s = 1.0f / 16.0f;
|
||||
glScalef(s, s, s);
|
||||
renderPainting(painting, motive->w, motive->h, motive->uo, motive->vo, a);
|
||||
//glDisable(GL_RESCALE_NORMAL);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void PaintingRenderer::renderPainting( Painting* painting, int w, int h, int uo, int vo, float a) {
|
||||
float xx0 = -w / 2.0f;
|
||||
float yy0 = -h / 2.0f;
|
||||
|
||||
float edgeWidth = 0.5f;
|
||||
|
||||
// Back
|
||||
float bu0 = (12 * 16) / 256.0f;
|
||||
float bu1 = (12 * 16 + 16) / 256.0f;
|
||||
float bv0 = (0) / 256.0f;
|
||||
float bv1 = (0 + 16) / 256.0f;
|
||||
|
||||
// Border
|
||||
float uu0 = (12 * 16) / 256.0f;
|
||||
float uu1 = (12 * 16 + 16) / 256.0f;
|
||||
float uv0 = (0.5f) / 256.0f;
|
||||
float uv1 = (0.5f) / 256.0f;
|
||||
|
||||
// Border
|
||||
float su0 = (12 * 16 + 0.5f) / 256.0f;
|
||||
float su1 = (12 * 16 + 0.5f) / 256.0f;
|
||||
float sv0 = (0) / 256.0f;
|
||||
float sv1 = (0 + 16) / 256.0f;
|
||||
|
||||
for (int xs = 0; xs < w / 16; xs++) {
|
||||
for (int ys = 0; ys < h / 16; ys++) {
|
||||
float x0 = xx0 + (xs + 1) * 16;
|
||||
float x1 = xx0 + (xs) * 16;
|
||||
float y0 = yy0 + (ys + 1) * 16;
|
||||
float y1 = yy0 + (ys) * 16;
|
||||
//setBrightness(painting, (x0 + x1) / 2, (y0 + y1) / 2);
|
||||
|
||||
// Painting
|
||||
float fu0 = (uo + w - (xs) * 16) / 256.0f;
|
||||
float fu1 = (uo + w - (xs + 1) * 16) / 256.0f;
|
||||
float fv0 = (vo + h - (ys) * 16) / 256.0f;
|
||||
float fv1 = (vo + h - (ys + 1) * 16) / 256.0f;
|
||||
|
||||
Tesselator& t = Tesselator::instance;
|
||||
float br = painting->getBrightness(a);
|
||||
t.color(br, br, br);
|
||||
|
||||
t.begin();
|
||||
t.vertexUV(x0, y1, -edgeWidth, fu1, fv0);
|
||||
t.vertexUV(x1, y1, -edgeWidth, fu0, fv0);
|
||||
t.vertexUV(x1, y0, -edgeWidth, fu0, fv1);
|
||||
t.vertexUV(x0, y0, -edgeWidth, fu1, fv1);
|
||||
|
||||
t.vertexUV(x0, y0, edgeWidth, bu0, bv0);
|
||||
t.vertexUV(x1, y0, edgeWidth, bu1, bv0);
|
||||
t.vertexUV(x1, y1, edgeWidth, bu1, bv1);
|
||||
t.vertexUV(x0, y1, edgeWidth, bu0, bv1);
|
||||
|
||||
t.vertexUV(x0, y0, -edgeWidth, uu0, uv0);
|
||||
t.vertexUV(x1, y0, -edgeWidth, uu1, uv0);
|
||||
t.vertexUV(x1, y0, edgeWidth, uu1, uv1);
|
||||
t.vertexUV(x0, y0, edgeWidth, uu0, uv1);
|
||||
|
||||
t.vertexUV(x0, y1, edgeWidth, uu0, uv0);
|
||||
t.vertexUV(x1, y1, edgeWidth, uu1, uv0);
|
||||
t.vertexUV(x1, y1, -edgeWidth, uu1, uv1);
|
||||
t.vertexUV(x0, y1, -edgeWidth, uu0, uv1);
|
||||
|
||||
t.vertexUV(x0, y0, edgeWidth, su1, sv0);
|
||||
t.vertexUV(x0, y1, edgeWidth, su1, sv1);
|
||||
t.vertexUV(x0, y1, -edgeWidth, su0, sv1);
|
||||
t.vertexUV(x0, y0, -edgeWidth, su0, sv0);
|
||||
|
||||
t.vertexUV(x1, y0, -edgeWidth, su1, sv0);
|
||||
t.vertexUV(x1, y1, -edgeWidth, su1, sv1);
|
||||
t.vertexUV(x1, y1, edgeWidth, su0, sv1);
|
||||
t.vertexUV(x1, y0, edgeWidth, su0, sv0);
|
||||
t.draw();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user