Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: LWJGL shading, multitekstuurien maskin pyöritys

Freeze [15.04.2014 20:20:25]

#

Heips. En tiedä kysynkö nyt liian vaikeasta aiheesta täällä, mutta ainahan sitä voi yrittää.

Tältä näyttää piirtofunktio javassa:

	private static void drawTexture(int shaderProgram, int texID1, int texID2) {

        //käytä omaa ohjelmaa shadereille
		glUseProgram(shaderProgram);
		//aseta tekstuurit
		setTextureUnits(shaderProgram);
		//kiinnitä käytettävät tekstuurit
		bindTextures(texture1.getTextureID(), texture2.getTextureID(), mask.getTextureID());

			glBegin(GL11.GL_QUADS);
				//väri
				glColor3f(1.0f, 1.0f, 1.0f);
				//teksturoitu rect
				glTexCoord2f(0,0);
				glVertex2f(-0.5f,-0.5f);
				glTexCoord2f(1,0);
				glVertex2f(+0.5f,-0.5f);
				glTexCoord2f(1,1);
				glVertex2f(+0.5f,+0.5f);
				glTexCoord2f(0,1);
				glVertex2f(-0.5f,+0.5f);

			glEnd();
		//default prog
		glUseProgram(0);
	}

	private static void setTextureUnits(int programId) {

		//unit 1, tekstuuri 1
		int loc = glGetUniformLocation(programId, "texture1");
		glUniform1i(loc, 0);

		//unit 2, tekstuuri 2
		int loc2 = glGetUniformLocation(programId, "texture2");
		glUniform1i(loc2, 1);

		//unit 3, maski
		int loc3 = glGetUniformLocation(programId, "mask");
		glUniform1i(loc3, 2);

	}

	public static void bindTextures(int texture1Id, int texture2Id, int texture3Id) {

		glActiveTexture(GL_TEXTURE0);
		glBindTexture(GL_TEXTURE_2D, texture1Id);

		glActiveTexture(GL_TEXTURE1);
		glBindTexture(GL_TEXTURE_2D, texture2Id);

		glActiveTexture(GL_TEXTURE2);
		glBindTexture(GL_TEXTURE_2D, texture3Id);

	}

haluan pyörittää maskia piirtämistä ennen, että saan ulos halutunlaisen tuloksen. Miten pystyn kääntämään sitä ? transform ja rotation pyörittää rectiä, jolloin myös tekstuurit 1 ja 2 pyörii, ja tämä en ole haluttu tulos.

feenix [15.04.2014 21:48:37]

#

Jos käsitin oikein, niin sinun tulee kääntää maskin tekstuurikoordinaatteja erikseen suhteessa muihin, jos haluat vain sen kääntyvän.

Freeze [15.04.2014 22:12:57]

#

Kyllä, näin tulisi tehdä. Yritän selvitellä tässä miten saan shaderin kääntämään näitä koordinaatteja kun passaan sinne halutun kulman.

feenix [16.04.2014 08:27:04]

#

Jos tekstuurikoordinaatit ovat välillä 0-1 ja halutaan pyörittää keskipisteen ympäri niin pyörittäminen onnistunee helposti muuntamalla arvot välille -0.5 - 0.5 ja laskemalla normaalilla 2D-pyöritysmatriisilla uudet arvot ja sen jälkeen muuntamalla takaisin välille 0-1. Onnistuu myös yhdellä matriisilaskulla kerralla kunhan muodostaa sopivan matriisin.

Jos taas eivät ole välillä 0-1 (atlas tms) niin sitten muuntaa sen välin keskipisteeseen millä sattuvat olemaan. Atlaksen kanssa saattaa sitten tietysti piirtyä vähän muutakin tuossa tapauksessa maskiin kuin itse maski.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta