当仅一些内部像素具有对应的坐标时,纹理映射整个图像

时间:2014-08-05 06:00:59

标签: opengl texture-mapping opentk

我有一个图像,我想在我的OpenTK(OpenGL的.NET包装器)应用程序中用作纹理。我不知道图像角落的世界坐标,但只知道图像中的一些像素。

这是我的代码(_overlay是我映射的图像,mapping是像素世界对应的列表):

    BitmapData data = _overlay.LockBits(new Rectangle(0, 0, _overlay.Width, _overlay.Height),
                                        ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

    GL.BindTexture(TextureTarget.Texture2D, _textureID);
    GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
                  OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
    _overlay.UnlockBits(data);

    GL.Enable(EnableCap.Texture2D);
    GL.Enable(EnableCap.Blend);
    GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha);

    GL.Begin(BeginMode.Polygon);
    foreach (var m in mapping)
    {
        var p = new Point(m.PixelInTopLeftCoordinates.X / Image.Width, m.PixelInTopLeftCoordinates.Y / Image.Height);
        GL.TexCoord2(p.X, p.Y);
        GL.Vertex2(m.WorldCoordinates.X, m.WorldCoordinates.Y);
    }

    GL.End();
    GL.Disable(EnableCap.Texture2D);
    GL.Disable(EnableCap.Blend);

映射有效,图像显示在正确的位置。问题是只有所提供像素的凸包被映射。我想提供内部像素,但是纹理映射要插入此映射并显示整个图像。这可能吗?我在网上搜索但是这不是可能的,或者我没有找到合适的关键字,但我找不到任何东西......

2 个答案:

答案 0 :(得分:0)

这不是问题本身的答案,而是对同一根本问题的不同解决方案。 我最终做的是找到仿射变换然后求解找到图像角落的相应坐标,然后使用4个角进行纹理映射。

答案 1 :(得分:0)

那你为什么不插入并在图像角上的正确世界位置添加点呢?