我通过绘制一个屏幕外纹理(由屏幕外帧缓冲区创建)成功渲染我的OpenGL视图.
draw -> offscreen FBO/Texture ------> onscreen FBO ---> render buffer -> context
Run Code Online (Sandbox Code Playgroud)
现在我想重用屏幕外纹理来渲染另一个OpenGL上下文.
draw -> offscreen FBO/Texture ----> onscreen FBO ---> render buffer -> context
\----> onscreen FBO2---> render buffer2 ->context 2
Run Code Online (Sandbox Code Playgroud)
我尝试但无法渲染任何内容2.任何人都有这个问题,并知道如何配置共享纹理?
谢谢!
更新:我刚刚创建了一个简单的项目,描述了我正在使用Framebuffer和双上下文. http://www.mediafire.com/?vxv1bubzvio4q7h
我刚刚开始使用Direct3D11,我正在尝试创建一个动态纹理,我计划每秒多次使用新数据进行更新.我的问题是每次用新数据更新纹理时,我都会从D3D调试器中得到这个错误:
D3D11:错误:ID3D11DeviceContext :: Map:此资源已经映射![RESOURCE_MANIPULATION错误#2097213:RESOURCE_MAP_ALREADYMAPPED]
在运行应用程序一段时间后,最终会从Map调用变为E_OUTOFMEMORY错误.
我正在创建这样的纹理:
D3D11_TEXTURE2D_DESC td;
td.ArraySize = 1;
td.BindFlags = D3D11_BIND_SHADER_RESOURCE;
td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
td.Format = DXGI_FORMAT_B8G8R8X8_UNORM;
td.Height = height;
td.Width = width;
td.MipLevels = 1;
td.MiscFlags = 0;
td.SampleDesc.Count = 1;
td.SampleDesc.Quality = 0;
td.Usage = D3D11_USAGE_DYNAMIC;
HR(m_device->CreateTexture2D(&td, 0, &texture));
Run Code Online (Sandbox Code Playgroud)
并更新其数据,如下所示:
HR(m_deviceContext->Map(texture, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource));
BYTE* mappedData = reinterpret_cast<BYTE*>(mappedResource.pData);
for(UINT i = 0; i < height; ++i)
{
memcpy(mappedData, buffer,rowspan);
mappedData += mappedResource.RowPitch;
buffer += rowspan;
}
m_deviceContext->Unmap(texture, 0);
Run Code Online (Sandbox Code Playgroud)
在创建纹理并将数据映射到它之前,我在程序中所做的就是初始化Direct3D设备.我完全被我做错了所困扰.我一直试图在msdn上尽可能多地阅读这篇文章,但没有任何东西可以帮助我弄清楚出了什么问题.根据msdn,我正在采取适当的步骤:
http://msdn.microsoft.com/en-us/library/ff476905(v=vs.85).aspx#Dynamic
To fill a dynamic …Run Code Online (Sandbox Code Playgroud) 我正在使用CUDA Toolkit 4.0在我的Geforce 330M上尝试使用OpenCL-OpenGL互操作.
我想捕获一个帧,将该数据用作Image2DOpenCL内核的输入图像().内核应该操纵数据并将其写入一个Image2DGL具有附加OpenGL纹理的图像对象.基本上它看起来像这样:
_______________ RGB _______________
| | uint8* | | CL_RGBA / CL_UNORM_INT8
| Grabber | ------------> | Image2D | -------------------------.
| avcodec | | [input] | |
|_______________| |_______________| |
|
V
_______________ _______________ _______________
| | | | | |
| Texture | ------------> | Image2DGL | <-----------------> | Kernel |
|_______________| | [output] | |_______________|
|_______________|
Internal
Format: GL_RGBA
Format: GL_RGBA
Type: ?
Run Code Online (Sandbox Code Playgroud)
我正在初始化纹理:
GLuint tex = 0;
void initTexture( …Run Code Online (Sandbox Code Playgroud) 这是一个原始的5x2纹理,以RGB和RGBA格式定义.
// 1 2 3 4 5
unsigned char rgb[] = { 0, 0, 0, 0, 0, 0, 200, 200, 200, 0, 0, 0, 200, 200, 200,
0, 0, 0, 0, 0, 0, 200, 200, 200, 0, 0, 0, 200, 200, 200, };
unsigned char rgba[] = { 0, 0, 0, 255, 0, 0, 0, 255, 200, 200, 200, 255, 0, 0, 0, 255, 200, 200, 200, 255,
0, 0, 0, 255, 0, 0, 0, 255, 200, 200, 200, 255, …Run Code Online (Sandbox Code Playgroud) 我正在使用Box2D创建一个应用程序,其中我从资源库获取图像并将其显示为精灵.
这是我所做的代码:
从资产库获取图像:
CGImageRef imgRef = [[mutArrAssetPhotos objectAtIndex:i] thumbnail];
Run Code Online (Sandbox Code Playgroud)
创建Texture2D:
CCTexture2D *spriteTexture = [[CCTexture2D alloc]initWithCGImage:imgRef resolutionType:kCCResolutionUnknown];
Run Code Online (Sandbox Code Playgroud)
从纹理创建精灵:
CCSprite *paddle = [CCSprite spriteWithTexture:spriteTexture];
Run Code Online (Sandbox Code Playgroud)
这让我 在控制台中发出警告:
"cocos2d: CCTexture2D: Using RGB565 texture since image has no alpha"
Run Code Online (Sandbox Code Playgroud)
仍然在模拟器中它虽然警告但但在设备图像中没有显示,但工作正常.
但相反,如果我使用:
CCSprite *paddle = [CCSprite spriteWithFile:@"img.png"];
Run Code Online (Sandbox Code Playgroud)
它工作正常,也没有发出任何警告.
有人可以帮忙吗?提前致谢.
我目前正在尝试使用Android的OpenGL ES 2.0进行游戏.我的地图是一个二维网格地图,每个位置都有一个高度值.现在我想在纹理中存储每个坐标的高度,以在顶点着色器中进行高度查找.
这个想法的好处是我可以生成一个通用三角网并将其(带偏移)放在用户当前正在查看的地图位置上.由于偏移,我可以省略每次用户移动其视图位置和我将从纹理读取的高度轮廓时创建新三角网的需要.
现在存在的问题是许多当前的Android设备(甚至是Galaxy S3)不支持顶点着色器中的纹理查找.可悲的是,这完全破坏了我目前的做法.
我的问题:还有其他可能从顶点着色器中的图形卡内存中获取数据吗?如果不直接指定每个顶点的数据,每次用户更改视图位置时,会强制我(据我所知)重新创建高度贴图.(每次用户更改视图位置时创建高度图都会变慢...)
感谢您的帮助+最好的问候,
安德烈亚斯
我正在统一制作游戏并遇到这个问题。用户可以将个人资料图像从该设备上传到我的后端服务器以个性化该帐户。这部分工作得很好,但是......
图片是正方形,但我想将图像显示为圆形,或者在游戏中显示时带有圆角?这可以在 Unity 中使用 C# 完成还是不可能?
所以我的问题是我尝试在启动时加载多个纹理,然后存储所有 ID,以便我可以绑定它们以使用它们。现在我知道 ID 被正确存储,因为我可以调试它并在分配和使用中看到 ID 是相同的。只是对于每个绑定,它使用我加载的最后一个纹理。这是我的代码:
GLuint TextureLoader::LoadTexture (const char* fileName,Material& material,int width,int height) {
GLuint textureImage;
FILE* textureFile;
textureFile = fopen(fileName, "rb");
unsigned char* imageData;
if (textureFile == NULL) {
return 0;
}
imageData = (unsigned char*)malloc(width * height * 3);
char header[54];
fread(header,1,54,textureFile);
fread(imageData, width * height * 3, 1, textureFile);
fclose(textureFile);
for (int i = 0; i < width * height; ++i) {
int nextIndex = i * 3;
unsigned char a = imageData[nextIndex];
unsigned char b …Run Code Online (Sandbox Code Playgroud) 我想让用户能够解码从图库加载的QR图像,我找到了一个插件来探索并加载图像作为texture2D,但要解码那个QR码,Texture2D必须是可读/可写的,我检查了插件,对于Android,它正在使用jar进行探索和加载,在IOS平台中,它使用的是打包的库,因此我无法访问lib的代码,
我已经搜索了答案,最大的解决方案是在Unity检查器中更改纹理的导入设置,但由于这是由代码加载的纹理,因此没有可用的检查器设置,所以我的问题是:
有没有办法让这个加载的纹理可以通过代码读/写?无需访问lib代码?
谢谢
这是可以通过此插件获取纹理的代码
void OnImageLoad(string imgPath, Texture2D tex, ImageAndVideoPicker.ImageOrientation imgOrientation)
{
Debug.Log("Image Location : " + imgPath);
Debug.Log("Image Loaded : " + imgPath);
texture = tex;
Texture2D readableText = new Texture2D(tex.width, tex.height);
readableText.LoadImage(tex.GetRawTextureData());
string url = QRCodeDecodeController.DecodeByStaticPic(readableText);
StartCoroutine(GetSceneAndLoadLevel(url));
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我试过这个答案,但没有运气.
以下是Android显示的错误:
06-23 21:47:32.853: I/Unity(10557): (Filename: D Line: 0)
06-23 21:47:33.784: E/Unity(10557): Texture needs to be marked as Read/Write to be able to GetRawTextureData in player
06-23 21:47:33.784: E/Unity(10557): UnityEngine.Texture2D:GetRawTextureData()
06-23 21:47:33.784: E/Unity(10557): TestQR:OnImageLoad(String, Texture2D, …Run Code Online (Sandbox Code Playgroud) 保存深度颜色模式纹理渲染的最简单方法是什么。可以在我的相机上不使用替换着色器的情况下完成此操作吗?
看起来大部分工作只需在具有渲染目标的相机上将颜色模式设置为深度即可完成。在材质上预览它,看起来很完美。我觉得保存它应该是微不足道的,但是,话又说回来,我对渲染缓冲区的了解还不够。
我知道您可以创建一个 Texture2D 并使用 ReadPixels 复制具有标准 rgba 颜色的活动渲染纹理,但是,我在计算如何仅使用深度来执行此操作时遇到问题。
如果我正确理解深度纹理,它们是 32 位单通道吗?但是,ReadPixel 仅适用于 RGBA32、ARGB32 和 RGB24 纹理格式。当我使用 ReadPixel 将其保存为 png 时,我似乎得到了一个灰色图像
color-depth texture2d unity-game-engine depth-buffer depth-testing
texture2d ×10
opengl ×3
c# ×2
c++ ×2
opengl-es ×2
android ×1
box2d-iphone ×1
ccsprite ×1
color-depth ×1
depth-buffer ×1
directx ×1
directx-11 ×1
iphone ×1
libavcodec ×1
loading ×1
opencl ×1