Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:04

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Textur färben
BeitragVerfasst: Sa Jul 30, 2011 14:58 
Offline
DGL Member

Registriert: Sa Dez 22, 2007 20:34
Beiträge: 8
Hallo

Mein Problem ist folgendes, ich habe eine Textur und die möchte ich gerne mit einer Fabe einfärben. Wenn ich jetzt jedoch mit glColor eine Farbe einstelle, erhalte ich eine Färbung. Leider ist diese Färbung nicht eine Farbe sondern eben ein Verlauf.

So wie im rechten Bild sollte es aussehen.
Hier hab ich mal ein kleines Testprogramm gebastelt.


Code:
  1.  
  2. import java.io.File;
  3. import java.io.IOException;
  4.  
  5. import javax.media.opengl.GL;
  6. import javax.media.opengl.GLAutoDrawable;
  7. import javax.media.opengl.GLCanvas;
  8. import javax.media.opengl.GLCapabilities;
  9. import javax.media.opengl.GLEventListener;
  10. import javax.media.opengl.GLException;
  11. import javax.swing.JFrame;
  12.  
  13. import zengine.geo.point.integer.PointInt2D;
  14.  
  15. import com.sun.opengl.util.FPSAnimator;
  16. import com.sun.opengl.util.texture.Texture;
  17. import com.sun.opengl.util.texture.TextureIO;
  18.  
  19. public class TestingArea extends JFrame {
  20.  
  21.     private final GLCapabilities glCapabilities = new GLCapabilities();
  22.  
  23.     private final GLCanvas glDataCanvas = new GLCanvas(glCapabilities);
  24.  
  25.     public TestingArea() {
  26.         super("Test");
  27.         setSize(900, 700);
  28.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29.         setVisible(true);
  30.  
  31.         this.add(glDataCanvas);
  32.  
  33.         FPSAnimator animator = new FPSAnimator(glDataCanvas, 22);
  34.         animator.start();
  35.         glDataCanvas.addGLEventListener(new GLEventListener() {
  36.  
  37.             @Override
  38.             public void reshape(GLAutoDrawable arg0, int arg1, int arg2,
  39.                     int arg3, int arg4) {
  40.                 // TODO Auto-generated method stub
  41.  
  42.             }
  43.  
  44.             Texture texture = null;
  45.  
  46.             @Override
  47.             public void init(GLAutoDrawable arg0) {
  48.                 GL gl = arg0.getGL();
  49.  
  50.                 gl.glClearColor(0, 0, 0, 0);
  51.                 gl.glClearDepth(-1);
  52.  
  53.                 try {
  54.                     texture = TextureIO.newTexture(new File("5.png"), true);
  55.                 } catch (GLException e) {
  56.                     // TODO Auto-generated catch block
  57.                     e.printStackTrace();
  58.                 } catch (IOException e) {
  59.                     // TODO Auto-generated catch block
  60.                     e.printStackTrace();
  61.                 }
  62.  
  63.             }
  64.  
  65.             @Override
  66.             public void displayChanged(GLAutoDrawable arg0, boolean arg1,
  67.                     boolean arg2) {
  68.  
  69.             }
  70.  
  71.             int width = 1024;
  72.             int height = 768;
  73.  
  74.             @Override
  75.             public void display(GLAutoDrawable glDrawable) {
  76.  
  77.                 GL gl = glDrawable.getGL();
  78.  
  79.                 gl.glMatrixMode(GL.GL_PROJECTION);
  80.                 gl.glLoadIdentity();
  81.                 gl.glViewport(0, 0, glDataCanvas.getWidth(),
  82.                         glDataCanvas.getHeight());
  83.                 gl.glOrtho(0, width, 0, height, 10000, -10000);
  84.  
  85.                 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
  86.  
  87.                 int xLoc = 0;
  88.                 int yLoc = 0;
  89.                 int zLoc = 0;
  90.  
  91.                 int quadWidth = 500;
  92.                 int quadHeight = 700;
  93.                 gl.glColor3f(1f / 255f * 255f, 1f / 255f * 33f,
  94.                         1f / 255f * 100f);
  95.  
  96.                 gl.glEnable(GL.GL_TEXTURE_2D);
  97.                 gl.glBindTexture(GL.GL_TEXTURE_2D, texture.getTextureObject());
  98.  
  99.                 // gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE,
  100.                 // GL.GL_DECAL);
  101.  
  102.                 gl.glBegin(GL.GL_QUADS);
  103.  
  104.                 gl.glTexCoord2f(1, 1);
  105.                 gl.glVertex3f(xLoc, yLoc, zLoc);
  106.                 gl.glTexCoord2f(1, 0);
  107.                 gl.glVertex3f(xLoc, yLoc + quadHeight, zLoc);
  108.                 gl.glTexCoord2f(0, 0);
  109.                 gl.glVertex3f(xLoc + quadWidth, yLoc + quadHeight, zLoc);
  110.                 gl.glTexCoord2f(0, 1);
  111.                 gl.glVertex3f(xLoc + quadWidth, yLoc, zLoc);
  112.  
  113.                 gl.glEnd();
  114.  
  115.             }
  116.         });
  117.     }
  118.  
  119.     public static void main(String[] args) {
  120.         new TestingArea();
  121.     }
  122.  
  123. }
  124.  


Vielleicht hat ja jemand eine Idee.

Vielen Dank.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur färben
BeitragVerfasst: Sa Jul 30, 2011 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
glColor multipliziert nur die gegebene Farbe mit der Farbe der Textur. Wenn du so einen „Scherenschnitt“ haben willst, nimmst du am besten den Alphakanal der Textur (der hoffentlich existiert) und packst den in eine separate Textur die nur weiß ist (und halt den Alphakanal drin hat). Dann kannst du die beliebig einfärben.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur färben
BeitragVerfasst: Sa Jul 30, 2011 15:18 
Offline
DGL Member

Registriert: Sa Dez 22, 2007 20:34
Beiträge: 8
Hallo

Vielen Dank für die schnelle Antwort.

Ich habe es jetzt so umgesetzt wie du vorgeschlagen hast. Jetzt habe ich schoene, weiße Texturen. Jetzt habe ich nur ein neues Problem, die Texturen weisen natürlich einen Verlauf auf.
Ich habe es schon mit shadingModel flat probiert. Aber es will nicht so recht.

[Code]
gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_COLOR, GL.GL_REPLACE);
[Code]

Sorgt erstmal dafür, dass die Farben ersetzt werden um sie nicht mit dem Untergrund zu vermischen. Nur wie bekomm ich jetzt noch das Antialaising weg?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur färben
BeitragVerfasst: So Jul 31, 2011 00:10 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm... verschwommene Texturen... da könnte glTexParameter GL_NEAREST vielleicht was helfen.
Oder ist die Textur nicht verschommen, sondern hat deine Farbe tatsächlich in der Textur einen Verlauf?

Es gibt da noch den AlphaTest. Siehe dazu das Beispiel bei glAlphaFunc.

Hoffe es hilft dir weiter.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur färben
BeitragVerfasst: So Jul 31, 2011 14:42 
Offline
DGL Member

Registriert: Sa Dez 22, 2007 20:34
Beiträge: 8
Ich habs gelöst.
Es lag an der Blendfunktion.
Ich hab es jetzt so eingestellt, das er komplett das Neue übernimmt und nicht irgendwie mit den unteren Pixeln verrechnet.

gl.glBlendFunc(GL.GL_ONE, GL.GL_ZERO);

Vielen Dank nochmal für eure Mühe.

P.S. gibt es irgendwo einen Erledigt-Knopf?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]