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.
Jos käsitin oikein, niin sinun tulee kääntää maskin tekstuurikoordinaatteja erikseen suhteessa muihin, jos haluat vain sen kääntyvän.
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.