绘制出的纹理不是透明的
如图黑色的部分应该是透明的。我要怎么做才能让背景透明呢
如图黑色的部分应该是透明的。我要怎么做才能让背景透明呢
解决方案 »
- 消息 208,级别 16,状态 6,过程 sele,第 22 行 对象名 'dbo.sele' 无效。
- winfrom 如何发送邮件
- 窗体大小改变后再置其在屏幕中间出现抖动,如何解决?
- tree 打钩的问题
- asp.net cookie 加密,解密
- 解决方案添加项目的初学者问题
- 请问高手C#B/S系统中,我按F5刷新后怎么会页面返回到主窗口的主页,主窗口采用的是框架。
- 急!如何在打开一网页时,在IE中隐藏工具栏,菜单栏,地址栏等,且一定要关闭原有的IE,即不能出现两个IE(一个有工具栏,一个没有)。
- 无法调试的问题
- 哪位高手,捐些可用分给我?
- C#回调函数问题,新手问题的
- 请问有没有有关sql复杂查询的书.....
我问的好多问题都没有人回复 所以我来给你送温暖来了
我表示这种题没有几个人会的 就像我的问题http://bbs.csdn.net/topics/390584427#new_post
~~~~(>_<)~~~~ 大神们都去睡觉了 要不都下班了 要不都辞职了 要不都转行了 要不都自杀了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using CsGL.OpenGL;
using System.Threading;
using System.IO;
namespace testopenGL
{
public partial class Form1 : Form
{
myGLView cOGL;
public Form1()
{
InitializeComponent();
label1.Left = pictureBox1.Left + 128;
cOGL = new myGLView();
cOGL.Dock = DockStyle.Fill; pictureBox1.Controls.Add(cOGL); //Thread t = new Thread(new ThreadStart(cOGL.Loop));
// t.Priority = ThreadPriority.Lowest;
// t.Start();
} private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
label3.Text = e.X + ":" + e.Y;
} private void timer1_Tick(object sender, System.EventArgs e)
{
pictureBox1.Refresh();
//cOGL.glDraw();
}
}
public enum DrawModes
{
CREATE_LIST,
DRAW_LIST
} public enum DispLists
{
table = 1,
ground,
testMap
}
class myGLView : OpenGLControl
{
private const float timeStep = 0.01f; //private const int nWidth = 40;
// private const int nHeight = 40;
//private const float size = 1.0f / 8.0f; private float angRotY = 30.0f; private particles mantel2 = new particles(); private uint[] textures = new uint[3];
//private IntPtr q1;
private GLUquadric q1; private bool bMirror = false;
private bool bUseTexture = true; private float[] positionLight = new float[4] { -6.0f, 5.0f, 0.0f, 1.0f };
public static Image GetImageFromFile(string filename)
{
FileStream fs = File.OpenRead(filename);
int fileLen = (int)fs.Length;
byte[] buf = new byte[fileLen];
fs.Read(buf, 0, fileLen);
Image img = Image.FromStream(fs);
fs.Close();
return img;
}
private void loadTextures()
{
GL.glEnable(GL.GL_TEXTURE_2D); GL.glGenTextures(2, textures);
GL.glBindTexture(GL.GL_TEXTURE_2D, textures[1]);
Bitmap img = new Bitmap("ground.jpg");
bitmapW = img.Width;
bitmapH = img.Height;
Rectangle rect = new Rectangle(0, 0, img.Width, img.Height);
BitmapData tex = img.LockBits(rect, ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
//GL.glTexEnvi(GL.GL_TEXTURE_ENV,GL.GL_TEXTURE_ENV_MODE,(int)GL.GL_DECAL);
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, (int)GL.GL_RGB8,
img.Width, img.Height,
0, GL.GL_BGRA_EXT, GL.GL_UNSIGNED_BYTE, tex.Scan0);
img.UnlockBits(tex);
GL.glLoadIdentity();
GL.glBindTexture(GL.GL_TEXTURE_2D, textures[2]);
img = new Bitmap(GetImageFromFile("0.png"));
bitmapW = img.Width;
bitmapH = img.Height;
rect = new Rectangle(0, 0, img.Width, img.Height);
tex = img.LockBits(rect, ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
//GL.glAlphaFunc(GL.GL_GREATER, 0.5f);//0.5可以换成任何在0~1之间的数
GL.glTexEnvi(GL.GL_TEXTURE_ENV,GL.GL_TEXTURE_ENV_MODE,(int)GL.GL_DECAL); GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, (int)GL.GL_RGBA16,
img.Width, img.Height,
0, GL.GL_BGRA_EXT, GL.GL_UNSIGNED_BYTE, tex.Scan0);
img.UnlockBits(tex);
img.Dispose();
img = null;
} protected override void InitGLContext()
{ GL.glShadeModel(GL.GL_SMOOTH);
GL.glHint(GL.GL_POLYGON_SMOOTH_HINT, GL.GL_DONT_CARE);
GL.glClearColor(0, 0, 0, 1);
GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); GL.glEnable(GL.GL_COLOR_MATERIAL);
GL.glColorMaterial(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE); GL.glEnable(GL.GL_DEPTH_TEST); loadTextures();
q1 = GLU.gluNewQuadric();
GLU.gluQuadricOrientation(q1, GLU.GLU_OUTSIDE);
GLU.gluQuadricNormals(q1, GLU.GLU_SMOOTH);
GLU.gluQuadricTexture(q1, (byte)GL.GL_TRUE);
drawTestMap(DrawModes.CREATE_LIST);
drawGraoud(DrawModes.CREATE_LIST);
OnSizeChanged(null);
}
private int bitmapW,bitmapH;
protected override void OnSizeChanged(System.EventArgs e)
{
GL.glViewport(0, 0, bitmapW * 2, bitmapH * 2);
GL.glMatrixMode(GL.GL_PROJECTION);
GL.glLoadIdentity();
GL.gluPerspective(0f, (float)this.Bounds.Width / (float)this.Bounds.Height, 0,1);
GL.glMatrixMode(GL.GL_MODELVIEW);
}
public override void glDraw()
{
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); GL.glMatrixMode(GL.GL_MODELVIEW);
GL.glLoadIdentity();
float x = (float)this.Bounds.Width / bitmapW;
GL.glRotatef(0,0,0,1); GL.glDisable(GL.GL_TEXTURE_2D);
GL.glTranslatef(-1f, 0, -1f);//从可视区左上角开始填充1/4区域
GL.glViewport(500, 180, bitmapW * 2, bitmapH * 2);
drawTestMap(DrawModes.DRAW_LIST);
GL.glLoadIdentity();
GL.glViewport(0, 0, Bounds.Width, Bounds.Height);
GL.glTranslatef(0, 0, -1f);//从可视区左上角开始填充1/4区域
drawGraoud(DrawModes.DRAW_LIST);
if (bUseTexture)
{
GL.glEnable(GL.GL_TEXTURE_2D);
GL.glBindTexture(GL.GL_TEXTURE_2D, textures[0]);
}
//Refresh();
// mantel.Render();
} private void drawGraoud(DrawModes mode)
{
switch (mode)
{
case DrawModes.CREATE_LIST:
GL.glNewList((uint)DispLists.ground, GL.GL_COMPILE); if (bUseTexture)
{
GL.glEnable(GL.GL_TEXTURE_2D);
GL.glBindTexture(GL.GL_TEXTURE_2D, textures[1]);
}
GL.glEnable(GL.GL_BLEND);
GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); GL.glColor4f(0,0,0, 1.0f);
GL.glNormal3f(0, 1, 0);
GL.glBegin(GL.GL_POLYGON);
GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex2f(1.0F, 1.0F);
GL.glTexCoord2f(0.0F, 1.0F); GL.glVertex2f(1.0F, 0.0F);
GL.glTexCoord2f(1.0F, 1.0F); GL.glVertex2f(0.0F, 0.0F);
GL.glTexCoord2f(1.0F, 0.0F); GL.glVertex2f(0.0F, 1.0F);
GL.glEnd(); GL.glDisable(GL.GL_BLEND);
GL.glDisable(GL.GL_TEXTURE_2D);
GL.glEndList();
break;
case DrawModes.DRAW_LIST:
GL.glEnable(GL.GL_TEXTURE_2D);
GL.glEnable(GL.GL_BLEND);
GL.glCallList((uint)DispLists.ground);
break;
}
}
private void drawTestMap(DrawModes mode)
{
switch (mode)
{
case DrawModes.CREATE_LIST:
GL.glEnable(GL.GL_BLEND);
GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
GL.glNewList((uint)DispLists.testMap, GL.GL_COMPILE);
if (bUseTexture)
{
GL.glEnable(GL.GL_TEXTURE_2D);
GL.glBindTexture(GL.GL_TEXTURE_2D, textures[2]);
} GL.glEnable(GL.GL_BLEND);
GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); GL.glColor4f(0,0,0, 1.0f);
GL.glNormal3f(0, 1, 0);
GL.glBegin(GL.GL_POLYGON);
GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex2f(1.0F, 1.0F);
GL.glTexCoord2f(0.0F, 1.0F); GL.glVertex2f(1.0F, 0.0F);
GL.glTexCoord2f(1.0F, 1.0F); GL.glVertex2f(0.0F, 0.0F);
GL.glTexCoord2f(1.0F, 0.0F); GL.glVertex2f(0.0F, 1.0F);
GL.glEnd();
GL.glDisable(GL.GL_BLEND);
GL.glDisable(GL.GL_TEXTURE_2D);
GL.glEndList();
break;
case DrawModes.DRAW_LIST:
GL.glCallList((uint)DispLists.testMap);
break;
}
} ~myGLView()
{
GLU.gluDeleteQuadric(q1);
} }}
我把代码贴出来了。因为是初次接触所以有很多不太明白
img.Width, img.Height,
0, GL.GL_BGRA_EXT, GL.GL_UNSIGNED_BYTE, tex.Scan0);
img.Width, img.Height,
0, GL.GL_BGRA_EXT, GL.GL_UNSIGNED_BYTE, tex.Scan0);
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, (int)GL.RGBA,
img.Width, img.Height,
0, GL.RGBA, GL.GL_UNSIGNED_BYTE, tex.Scan0);
img.Width, img.Height,
0, GL.RGBA, GL.GL_UNSIGNED_BYTE, tex.Scan0);
改成一样也不行。改成一样后那个图片的颜色被改变了,背景还是黑色的
http://download.csdn.net/download/xxffnn2002/284606