我有一个绑定到简单四边形的OpenGL纹理.
我的问题是:我的纹理是128x128像素的图像.我只在该图像上填充大约100x60像素,其他像素是透明的.我把它保存在.png文件中.当我画画时,绑定纹理的透明部分是白色的.
假设我有背景.当我在这个背景上绘制这个新的四边形时,我看不到透过纹理的透明部分.
有什么建议?
码:
// Init code...
gl.glEnable(gl.GL_TEXTURE_2D);
gl.glDisable(gl.GL_DITHER);
gl.glDisable(gl.GL_LIGHTING);
gl.glDisable(gl.GL_DEPTH_TEST);
gl.glTexEnvi(gl.GL_TEXTURE_ENV, gl.GL_TEXTURE_ENV_MODE, gl.GL_MODULATE);
// Drawing code...
gl.glBegin(gl.GL_QUADS);
gl.glTexCoord2d(0.0, 0.0);
gl.glVertex3f(0.0f, 0.0f, 0.0f);
gl.glTexCoord2d(1.0, 0.0);
gl.glVertex3f(1.0f, 0.0f, 0.0f);
gl.glTexCoord2d(1.0, 1.0);
gl.glVertex3f(1.0f, 1.0f, 0.0f);
gl.glTexCoord2d(0.0, 1.0);
gl.glVertex3f(0.0f, 1.0f, 0.0f);
gl.glEnd();
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几乎所有的东西,从启用混合到更改到GL_REPLACE,但是我无法让它工作.
编辑:
// Texture. Have tested both gl.GL_RGBA and gl.GL_RGB8.
gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, (int)gl.GL_RGBA, imgWidth, imgHeight,
0, gl.GL_BGR_EXT, gl.GL_UNSIGNED_BYTE, bitmapdata.Scan0);
Run Code Online (Sandbox Code Playgroud) 我在android中保存了一个cookie.现在我想把它传递给我的浏览器意图.看看我目前的代码:
Intent browser = new Intent("android.intent.action.VIEW",
Uri.parse("http://mypage.php/memberpagethatrequireacookie.php"));
//putExtra cannot take these arguments -> browser.putExtra("org.apache.http.cookie.Cookie", cookie);
startActivity(browser);
Run Code Online (Sandbox Code Playgroud)
我希望它暂时存储在我的浏览器中,以便我的成员页面成功加载.我的cookie是从HTTP请求成功创建的,List<Cookie> cookie;
如果我应该提供更多代码,我将它分配给一个告诉我.
有任何想法吗?提前致谢!
我有一个问题,即雾在使用OpenGL的桌面程序(PC)上工作,但同样的雾不能像在Android设备上那样工作(使用OpenGL ES).
代码完全相同,看起来像这样:
// OpenGL ES Init
gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
float fogColor[] = {0.5, 0.5, 0.5, 1.0};
// Fog color to mFogBuffer...
gl.glEnable(GL10.GL_FOG);
gl.glFogfv(GL10.GL_FOG_COLOR, mFogBuffer);
gl.glFogf(GL10.GL_FOG_DENSITY, 0.04f);
// OpenGL Init
glClearColor(0.5, 0.5, 0.5, 1.0);
float fogColor[] = {0.5, 0.5, 0.5, 1.0};
glEnable(GL_FOG);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_DENSITY, 0.04f);
Run Code Online (Sandbox Code Playgroud)
但是我无法在我的Android设备上使OpenGL雾完全相同.我测试了glShadeModel()属性等等.
应该雾的区域是完全白色的,它是一个基本的四边形(由三角形构建).我做了一些gluLookAt()改造,但它不应该影响这种雾.
有任何想法吗?
我在getView中使用此代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listrow, null);
}
Order o = items.get(position);
if (o != null) {
TextView tt = (TextView) v.findViewById(R.id.toptext);
ImageView thumb = (ImageView) v.findViewById(R.id.icon);
if (o.getOrderDrawable() != null) {
thumb.setImageDrawable(o.getOrderDrawable());
} else {
tt.setText(o.getOrderTitle());
}
}
return v;
}
Run Code Online (Sandbox Code Playgroud)
问题是滚动时; 有时会显示正确的图像,但有时向后/向前滚动时,图像会随机显示,并且与行无关.
图像从网上下载.
我该如何解决这个问题?
我一直在Android中绘制图形.那里有很多示例应用程序,但我总能看到的一件事是lockCanvas.有人可以解释得更近,因为我真的没有得到它,也因为我认为理解未来的编程很重要吗?
一个例子:
try {
c = panel_thread.getHolder().lockCanvas(null);
synchronized (panel_thread.getHolder()) {
panel_thread.update();
panel_thread.onDraw(c);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在所拥有的.我该怎么解释这个?同步做什么?为什么将canvas-object分配到getHolder和lockCanvas很重要?
这部分也令人困惑:
panel_thread.getHolder().unlockCanvasAndPost(c);
Run Code Online (Sandbox Code Playgroud)
为什么这有必要?我真的需要一个更细致的解释.:)
我试图从我的EditText框中过滤我的ListView,但是目前它没有用.
我有一个正确获取数据的ListView,它们使用ArrayAdapter类和我自己的ArrayList类添加到我自己的ListView中.例如,当我输入"table"时,我希望它从我的ListView中加载的标题中排序,而不是它应该显示剩下的项目和匹配表.
我目前的代码:
private ArrayList<Order> orders; /* ArrayList class with my own Order class to
define title, info etc. */
private OrderAdapter adapter; //Own class that extends ArrayAdapter
orders = new ArrayList<Order>();
adapter = new OrderAdapter(this, R.layout.listrow, orders); /* listrow defining a
single item in my ListView */
setListAdapter(adapter); //Set our adapter to a ListView
search.addTextChangedListener(filterTextWatcher); //search is my EditText
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int …Run Code Online (Sandbox Code Playgroud) 我正在研究一些示例代码然后出现了:
public abstract class RandomPool<T> extends Pool {
//Class...
}
Run Code Online (Sandbox Code Playgroud)
什么<>用的?为什么只是T在这些内部?对我来说这似乎是随机的.但是,如何在更长的制作程序的角度使用它呢?
谢谢,告诉我是否需要添加更多细节!
我已经阅读了整个网络上的教程,并在游戏中指定了不同类型的教程(但事实证明这很普遍).
是否有任何理由为什么许多开发人员将他们的变量命名为:
mContext
Run Code Online (Sandbox Code Playgroud)
对我来说,默认只是将其命名为"上下文"或类似的东西.
之前有"m"的原因吗?(我知道这是一个风格问题,但我只是好奇它代表什么)
我想根据手机运行的当前Android版本选择标准的Android菜单图标.
示例图标:

记得!我不想为此目的绘制drawable,我确实想要基于设备API的正确图标.
这可能吗?
我正在寻找一种方法来提高我的粒子系统性能,因为它在FPS方面非常昂贵.这是因为我打电话:
glDrawElements(GL_TRIANGLE_STRIP, mNumberOfIndices,
GL_UNSIGNED_SHORT, 0);
Run Code Online (Sandbox Code Playgroud)
我为我的应用程序中的每个粒子(可能在1000到5000个粒子之间)调用此方法.请注意,当增加到超过1000个粒子时,我的应用程序开始在FPS中下降.我正在使用VBO:s,但调用此方法时的性能太高.
任何想法如何使粒子系统更有效?
编辑:这是我的粒子系统绘制的东西:
glBindTexture(GL_TEXTURE_2D, textureObject);
glBindBuffer(GL_ARRAY_BUFFER, vboVertexBuffer[0]);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboTextureBuffer[0]);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndexBuffer[0]);
Vector3f partPos;
for (int i = 0; i < m_numParticles; i++) {
partPos = m_particleList[i].m_pos;
glTranslatef(partPos.x, partPos.y, partPos.z);
glDrawElements(GL_TRIANGLE_STRIP, mNumberOfIndices,
GL_UNSIGNED_SHORT, 0);
gl.glTranslatef(-partPos.x, -partPos.y, -partPos.z);
}
Run Code Online (Sandbox Code Playgroud)