标签: texture2d

我可以在像素着色器中创建tile引擎吗?

我正在尝试使用像素着色器和两个纹理创建一个tile引擎.一个纹理将保持tileset,一个将保存地图.

是否可以将纹理数据作为实际(非采样)数据读取,以便从地图中提取索引?

读取像素数据的最佳方法是什么?

我只尝试过text2D,但是还有一些不足之处(说实话,我对像素着色器有点新意).

基本上,我需要一种方法来从地图纹理中的特定像素读取实际数据,并将其用作切片纹理的整数索引.假设我已经设法创建并将适当的纹理传递给着色器.

有什么想法吗?

(使用monogame for metro所以dx等级9_1)

tile-engine texture2d pixel-shader

7
推荐指数
1
解决办法
302
查看次数

如何使用纹理缓冲区来读取单个整数而不是vec4

我有一个工作代码,我从纹理缓冲区中读取着色器中的vec4值.

在客户端,我创建了一个位移矢量缓冲区:

vec4 vector1 : vec4(x1, y1, z1, w1);
vec4 vector2 : vec4(x2, y2, z2, w2);
vec4 vector3 : vec4(x3, y3, z3, w3);
..
Run Code Online (Sandbox Code Playgroud)

然后我创建一个包含vector1,vector2,vector3的顶点缓冲区....

接下来,我创建一个纹理并使用以下方法将上面的缓冲区绑定到它:

glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, bufferID);
Run Code Online (Sandbox Code Playgroud)

我之所以选择GL_RGBA32F,是因为x1,y1,z1,w1等都是浮点数.

在着色器中我可以使用以下方法获取单个向量:

vec4 vector1 = texelFetch(samplerObj, 0);
vec4 vector2 = texelFetch(samplerObj, 1);
.
.
Run Code Online (Sandbox Code Playgroud)

但是,现在假设我的位移矢量不是vec4,而是一个整数.即

int vector1 = x1; //(int is 32 bit unsigned)
int vector2 = x2; //(int is 32 bit unsigned)
Run Code Online (Sandbox Code Playgroud)

有人可以告诉相应的internalFormat会是什么?是吗

glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, bufferID);
Run Code Online (Sandbox Code Playgroud)

我还将如何在着色器中使用texelFetch获取值?是吗

int vector1 = texelFetch(samplerObj, 0);
Run Code Online (Sandbox Code Playgroud)

要么

int vector1 = texelFetch(samplerObj, 0).r ?
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为texelFetch应该返回一个有4个组件的纹素,所以我必须使用结果的红色组件吗?

opengl texture2d

7
推荐指数
1
解决办法
3491
查看次数

'texture2D':找不到匹配的重载函数OpenGL ES2 Android(JAVA)

我正在研究一个项目,对于那个项目,我不得不浏览一本名为"OpenGL ES 2 For Android:快速入门指南"的书.所以当我进行纹理处理时,我得到的错误是:

'texture2D' : No matching overloaded function found
Run Code Online (Sandbox Code Playgroud)

当我编译着色器时.着色器代码:

// Fragment shader
precision mediump float;

uniform sampler2D u_TextureUnit;
varying vec4 v_TextureCoordinates;

void main()
{
    gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates);
}

// Vertex shader
uniform mat4 u_Matrix;
attribute vec4 a_Position;
attribute vec4 a_TextureCoordinates;

varying vec4 v_TextureCoordinates;

void main()
{
    gl_Position = u_Matrix * a_Position;
    v_TextureCoordinates = a_TextureCoordinates;
}
Run Code Online (Sandbox Code Playgroud)

我为我的项目尝试了相同的着色器以及与书中完全相同的代码但是当我编译着色器时它仍然给我相同的错误,并且android设备上的视口是空白的,只是我设置的清晰颜色显示.

java android opengl-es texture2d

7
推荐指数
1
解决办法
7564
查看次数

在多个网格上的Vulkan纹理渲染

我正在模型的多个网格上渲染不同的纹理,但我没有太多关于这些过程的线索.有人为每个网格建议,创建自己的描述符集并调用vkCmdBindDescriptorSets()和vkCmdDrawIndexed()进行渲染,如下所示:

    // Pipeline with descriptor set layout that matches the shared descriptor sets
vkCmdBindPipeline(...pipelines.mesh...);
...
// Mesh A
vkCmdBindDescriptorSets(...&meshA.descriptorSet... );
vkCmdDrawIndexed(...);
// Mesh B
vkCmdBindDescriptorSets(...&meshB.descriptorSet... );
vkCmdDrawIndexed(...);
Run Code Online (Sandbox Code Playgroud)

然而,上述方法与切碎机样品和vulkan的样品有很大不同,这使得我不知道从哪里开始改变.我非常感谢任何帮助,指导我找到正确的方向.

干杯

texture-mapping texture2d vulkan

7
推荐指数
2
解决办法
2994
查看次数

在XNA中调整和加载texture2d

我是XNA的新手以防万一.我尝试做的是加载与原版不同尺寸的纹理,或者至少有可能在之后改变尺寸.我在某些地方看到我可以使用:

Texture2D.FromStream(GraphicsDevice graphicsDevice, Stream stream, 
                 int width, int height, bool zoom)
Run Code Online (Sandbox Code Playgroud)

但我也读到以这种方式加载纹理忽略了ContentManager,而且我为垃圾收集器做的工作更加困难.

使用ContentManager以任何大小加载图像的正确方法是什么?如果那是不可能的,我可以按比例改变他的大小,比如使用缩放吗?

背景:我正在建立一个nxn和平委员会.当n太大时我自动需要和平变得更小.

c# xna texture2d downsize

6
推荐指数
1
解决办法
2万
查看次数

如何切换CCSprite的图像

我有一个使用初始化的CCSprite [CCSprite spriteWithSpriteFrameName:@"plist_file_key_here.png"].我已经将plist文件中的所有sprite添加到CCSpriteFrameCache中.我试过像这样设置纹理:

CCSpriteFrame * frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name];
NSAssert(frame.texture!=nil, @"frame.texture can't equal nil"); //this works fine
[sprite setTexture:frame.texture]; //doesn't cause a white square to appear, just doesn't switch the image.
Run Code Online (Sandbox Code Playgroud)

正如我在评论中所说,这不起作用.我认为它与using [CCSprite spriteWithFile:]和之间的区别有关[CCSprite spriteWithSpriteFrameName:],它依赖于从纹理图集加载到CCSpriteFrameCache中的精灵帧.当使用从纹理图集加载的精灵时,每个精灵的纹理等于精灵图纸的纹理.有没有办法解决这个问题,还是我必须删除并重新创建精灵?如果这是我唯一的选择,有没有办法从其父节点删除ccnode但保留其子节点?

texture2d cocos2d-iphone ccsprite

6
推荐指数
1
解决办法
1万
查看次数

XNA:缩小纹理2D抗锯齿?

我正在使用XNA中的一个项目,我正在使用一些相当大的纹理,我将其作为Texture2D对象加载到游戏中,并且在屏幕上绘制的内容比它们加载的要小得多.原因是我需要在不同的地方以各种不同的尺寸绘制它们,虽然我可以用多个纹理来做这个,但这样做是不切实际的.

我的问题是,在缩小它们时,XNA似乎不会对这些Texture2D对象进行抗锯齿处理.我已经设定:

graphics.PreferMultiSampling = true;
Run Code Online (Sandbox Code Playgroud)

并且

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
Run Code Online (Sandbox Code Playgroud)

但无济于事.我也尝试过各种涉及GraphicsDevice过滤器的东西,但老实说,我并不知道自己在做什么.

显然,我正在使用spriteBatch绘制它,但除此之外,我绘制它的方式没什么特别有趣的.

这是一个(放大的)例子,说明正在发生的事情,以及我正在努力实现的目标:

实际结果 期望的结果

如您所见,XNA在重新缩放图像时不提供任何抗锯齿功能.有没有办法可以强制它这样做,以使边缘看起来更干净?

c# xna xbox antialiasing texture2d

6
推荐指数
1
解决办法
1714
查看次数

OpenGL 3.3多重纹理:GL_TEXTURE1及以下总是黑色(只有GL_TEXTURE0可以正常工作)

GL_TEXTURE0(插槽0上的纹理)之后的每个纹理都是黑色.

片段着色器(通过更改权重来检查不同纹理的示例代码):

#version 330

uniform sampler2D g_ColorTex;
uniform sampler2D g_DepthTex;
uniform sampler2D g_DofNearBlurTex;
uniform sampler2D g_DofDownBlurTex;

in vec4 g_VertexPosition;
in vec2 g_ScreenCoords;

layout (location = 0) out vec4  FragColor;

void main() 
{
    // Changing weights to check textures
    FragColor  = 1.00001f * vec4(texture(g_ColorTex      , g_ScreenCoords).rgb, 1.0f);
    FragColor += 0.00001f * vec4(texture(g_DepthTex      , g_ScreenCoords).rgb, 1.0f);
    FragColor += 0.00001f * vec4(texture(g_DofNearBlurTex, g_ScreenCoords).rgb, 1.0f);
    FragColor += 0.00001f * vec4(texture(g_DofDownBlurTex, g_ScreenCoords).rgb, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)

我上传这样的纹理(摘录!):

::glUseProgram(ShaderHandle);

unsigned int TextureIndex;


TextureIndex = ::glGetUniformLocation(ShaderHandle, "g_ColorTex");

::glUniform1i(TextureIndex, 0); …
Run Code Online (Sandbox Code Playgroud)

opengl textures glsl texture2d multitexturing

6
推荐指数
1
解决办法
6498
查看次数

将SurfaceTexture渲染到Unity Texture2D

我较早提出了类似的问题,但是并没有很好地阐明它们,现在我想提一个建议,我在代码中做错了什么。

所以我想做的是将SurfaceTexture从Android插件渲染到Unity Texture2D。

统一代码:

public class AndroidHandler : MonoBehaviour {

    [SerializeField]
    private RawImage _rawImage;

    private Texture2D _inputTexture;
    private AndroidJavaObject androidStreamerObj;
    private System.IntPtr _nativePtr;

    void Start () {

        _rawImage.material.SetTextureScale("_MainTex", new Vector2(-1, -1));
        InitAndroidStreamerObject();
    }

    private void InitAndroidStreamerObject()
    {
        androidStreamerObj = new AndroidJavaObject("makeitbetter.figazzz.com.vitamiousing7.AndroidStreamer");

        Int32 texPtr = androidStreamerObj.Call <Int32> ("GetTexturePtr");
        Debug.Log("texture pointer? " + texPtr);
        Texture2D nativeTexture = Texture2D.CreateExternalTexture (128, 128, TextureFormat.RGBA32 , false, false, new System.IntPtr(texPtr));

        _rawImage.texture = nativeTexture;
    }

    public void StartStream()
    {
        string streamLink = "rtmp://live.hkstv.hk.lxdns.com/live/hks"; //"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov"; //"rtmp://live.hkstv.hk.lxdns.com/live/hks";
        androidStreamerObj.Call("LaunchStream", streamLink); …
Run Code Online (Sandbox Code Playgroud)

c# android opengl-es texture2d unity-game-engine

6
推荐指数
2
解决办法
2674
查看次数

DirectX:从 ID3D11Texture2D 获取 DXGI_FORMAT_NV12 格式的 RGB 数据的最佳方法?

我正在使用 DirectX 来绘制视频。通过Intel Media SDK解码后。然后我通过以下英特尔代码绘制它:

mfxStatus CD3D11Device::RenderFrame(mfxFrameSurface1 * pSrf, mfxFrameAllocator * pAlloc)
{
    HRESULT hres = S_OK;
    mfxStatus sts;

    sts = CreateVideoProcessor(pSrf);
    MSDK_CHECK_STATUS(sts, "CreateVideoProcessor failed");

    hres = m_pSwapChain->GetBuffer(0, __uuidof( ID3D11Texture2D ), (void**)&m_pDXGIBackBuffer.p);
    if (FAILED(hres))
        return MFX_ERR_DEVICE_FAILED;

    D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC OutputViewDesc;
    if (2 == m_nViews)
    {
        m_pVideoContext->VideoProcessorSetStreamStereoFormat(m_pVideoProcessor, 0, TRUE,D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE,
            TRUE, TRUE, D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE, NULL);
        m_pVideoContext->VideoProcessorSetOutputStereoMode(m_pVideoProcessor,TRUE);

        OutputViewDesc.ViewDimension = D3D11_VPOV_DIMENSION_TEXTURE2DARRAY;
        OutputViewDesc.Texture2DArray.ArraySize = 2;
        OutputViewDesc.Texture2DArray.MipSlice = 0;
        OutputViewDesc.Texture2DArray.FirstArraySlice = 0;
    }
    else
    {
        OutputViewDesc.ViewDimension = D3D11_VPOV_DIMENSION_TEXTURE2D;
        OutputViewDesc.Texture2D.MipSlice = 0;
    }

    if (1 == m_nViews || 0 == …
Run Code Online (Sandbox Code Playgroud)

rgb yuv directx-11 texture2d

6
推荐指数
1
解决办法
1696
查看次数