小编Mic*_* IV的帖子

最新的GCC中是否提供C++ 11 <codecvt>标头?

看完后<codecvt>不是一个标准的头?我不知道该怎么做,因为我的Windows版本的代码库用于<codecvt>在宽字符串和字符串之间进行转换.我目前使用GCC 4.7 for Linux版本的代码.难道<codecvt>还缺少最新的GCC?什么是解决方法?

顺便说一下,正如这里所说,以下代码不适用于GCC:

wstring ws = L"hello";
string ns(ws.begin(), ws.end());
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11

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

FFMPEG:av_rescale_q - time_base差异

我想一劳永逸地知道,在FFMPEG中,时基收费和重新缩放是如何工作的.在回答这个问题之前,我做了一些研究,发现了许多有争议的答案,这使得它更加令人困惑.因此,根据官方的FFMPEG 示例,我们必须这样做

从编解码器到流时基的rescale输出数据包时间戳值

用这样的东西:

pkt->pts = av_rescale_q_rnd(pkt->pts, *time_base, st->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
pkt->dts = av_rescale_q_rnd(pkt->dts, *time_base, st->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
pkt->duration = av_rescale_q(pkt->duration, *time_base, st->time_base);
Run Code Online (Sandbox Code Playgroud)

但是在这个问题中,一个人向我提出类似的问题,他给出了更多的例子,他们每个人都做了不同的事情.与所有这些方式都很好的答案相反,对我来说,只有以下方法有效:

frame->pts += av_rescale_q(1, video_st->codec->time_base, video_st->time_base);
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我在FFMPEG API外以60 fps生成视频数据包(h264),然后将它们写入mp4容器.

我明确地说:

video_st->time_base = {1,60};
video_st->r_frame_rate = {60,1};
video_st->codec->time_base = {1 ,60};
Run Code Online (Sandbox Code Playgroud)

我看到的第一个奇怪的事情发生在我为输出格式上下文写入标题之后:

AVDictionary *opts = nullptr;
int ret = avformat_write_header(mOutputFormatContext, &opts);
av_dict_free(&opts);
Run Code Online (Sandbox Code Playgroud)

之后,video_st->time_base填充:

num = 1;
den = 15360
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.

我想要有人请我说.接下来,在写帧之前,我计算了数据包的PTS.在我的情况下PTS = DTS,因为我根本不使用B帧.

我必须这样做:

 const int64_t duration = av_rescale_q(1, video_st->codec->time_base, video_st->time_base);
 totalPTS += duration; //totalPTS …
Run Code Online (Sandbox Code Playgroud)

c++ video ffmpeg libav

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

OpenGL Far Plane给出了非常大的值剪辑一切

我发现如果我定义透视矩阵的远平面距离1,000,000,000,那么该范围内的所有对象都会被剪裁.工作范围100,000,000很好.有谁能解释一下?我的意思是,它仍然没有近似浮点数最大范围.或者我错了吗?为了计算透视,我使用GLM库.没有固定的管道僵硬.

更新:(JAVA)透视矩阵计算:

 public static Mat4 perspective(float fovy, float aspect, float zNear, float zFar) {
    float range = (float) (Math.tan(Math.toRadians(fovy / 2.0f)) * zNear);
    float left = -range * aspect;
    float right = range * aspect;
    float bottom = -range;
    float top = range;

    Mat4 res = new Mat4(0.0f);

    res.matrix[0] = (2.0f * zNear) / (right - left);
    res.matrix[5] = (2.0f * zNear) / (top - bottom);
    res.matrix[10] = -(zFar + zNear) / (zFar - zNear);
    res.matrix[11] …
Run Code Online (Sandbox Code Playgroud)

opengl math perspective

5
推荐指数
1
解决办法
529
查看次数

从C++容器中删除对象而不删除它们

我正在使用C++ std向量存储渲染对象以进行简单的场景图实现.我需要能够在场景图中添加和删除运行时渲染对象.添加不是问题,用于删除:读取矢量和其他的文档C++容器看起来当弹出对象时会调用它们的析构函数.这不是我需要的,因为我希望以后能够将这些对象重新添加到渲染循环中.这个问题的可能解决方案是什么?我忘了提到的重要细节 - 我正在使用指向渲染对象的指针向量.

c++ 3d-engine stdvector

5
推荐指数
1
解决办法
5691
查看次数

直接在GPU上将FBO纹理编码为H.264视频

我打算编写一个应用程序,其中我需要能够对来自FBO附加纹理的给定图像序列的视频进行编码.我想利用GPU并行性的强度并且最大限度地做到"服务器端".所以我发现NVidia有一个使用CUDA对视频进行编码的SDK,但在阅读了SDK 白皮书之后,我仍然不清楚是否可以在不离开GPU的情况下将FBO纹理作为NVCUVENC(编码器)的图像帧源发送.我相信从CPU上传图像会给编码过程带来巨大的开销,因为如果我不能直接在GPU端获取FBO纹理,这意味着我必须将其像素读取到CPU然后再将它们发送到GPU进行编码.所以我基本上有两个问题:

  1. 难道NVIDIA CODEC图书馆允许做我想要什么?

  2. 如果没有,可以使用其他GPGPU SDK,如OpenCL甚至OpenGL 4.3计算着色器吗?

有关DirectX或相关的东西其他窗口任何不能被考虑,因为我需要它Linux.Also我只用NVIDIA的显卡.

opengl cuda gpgpu opencl video-encoding

5
推荐指数
1
解决办法
1691
查看次数

OpenGL Alpha 混合和对象独立透明度

我正在尝试使用以下简单的技术来实现对象独立透明度(OIT):

  1. 对不透明和透明物体进行排序。

  2. 渲染不透明并写入深度。

  3. 禁用深度写入、启用 Alpha 混合并渲染透明对象。

如果我只有完全不透明和透明的对象,它就可以工作。但是如果某些对象具有透明的 Alpha 纹理(我的所有网格都是平面的)并且需要 Alpha 混合,而其他对象是透明的,那么情况又如何呢?这种情况下的例程是什么?目前,如果我首先使用深度写入和 alpha 混合渲染透明,然后使用 alpha 通道纹理渲染对象(深度注销,混合打开),会发生的情况是最后渲染平面的部分与第一个渲染平面相交飞机被淘汰。这是一张描述我所追求的图片:

在此输入图像描述

两个平面都有一定程度的透明度,并且仍然保持深度排序。我知道我可以对 OIT 使用更复杂的方法,就像这样。但是是否可以在不进入片段链表等的情况下做到这一点?

opengl

5
推荐指数
1
解决办法
2545
查看次数

无法运行 bjam 来编译 boost python 教程

我正在尝试按照本教程为 Windows 的 python 包装 C++ 代码。我安装了 python。下载了最新版本的 boost(1_55)。首先我运行 bootstrap.bat 来构建 bjam.exe。接下来,我配置了 boost_1_55_0\tools\ build\v2\user-config.jam 使用 msvc10 编译器并添加 python 安装路径。现在,基于教程:

现在我们准备好了... 一定要 cd 到教程“hello.cpp”和“Jamroot”所在的 libs/python/example/tutorial。

最后:

比贾姆

尝试在该目录中运行 bjam 给我:“bjam 未被识别为内部或外部命令”错误。我在这里错过了什么?user-config.jam 应该放在另一个位置吗?或者 bjam 添加到系统路径?

更新:

好的。感谢@john 我不得不将 bjam 添加到系统路径。但是现在,运行它,hello_ext.lib 是在 \boost_1_55_0\libs\python\example\tutorial\bin\msvc-11.0\debug 中创建的,但不是 DLL.Based在教程中,我应该获取扩展名的 DLL 文件。现在,我不确定 python 如何与扩展名链接。但如果我假设它确实像 C++,那么它应该与 hello_ext.lib 链接。但是如果运行:

蟒蛇你好.py

其中包含从扩展导入的方法,python 运行时崩溃。没有关于此工作流的综合教程吗?Boost 文档完全不了解这个。

c++ python boost

5
推荐指数
1
解决办法
5446
查看次数

禁用GLSL编译器优化

我正在使用带有GLSL 420的OpenGL 4.2.我需要阻止GLSL编译器优化未使用的制服,因为它们用于偶尔的测试.我试图把:

#version 420
#pragma optimize (off)
...
......
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何影响.编译器仍然清理所有未使用的制服.我正在使用GeForce 680GTX在Linux上运行NVidia驱动程序v319

opengl glsl

5
推荐指数
1
解决办法
5538
查看次数

为什么少于2张图像的行之间没有间隙?

所以我在div中有一堆图像,如果它们不适合窗口宽度,它们被包裹成几行.我不明白的部分是,为什么这两行之间只有连续超过1个图像

码:

<style>
img {
    width: 350px;
}
</style>
...
<div>
    <img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
    <img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
    <img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
    <img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
    <img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
    <img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
</div>
Run Code Online (Sandbox Code Playgroud)

示例:http://jsbin.com/juterinu/3

我可以在FF和Chrome中看到这种效果.

html css

5
推荐指数
1
解决办法
153
查看次数

NDK Clang错误:对'localeconv'的未定义引用

我正在尝试在Android Studio中构建C++ NDK库.我有一个名为json的外部lib 和localeconv上的Clang编译器faild.

json.hpp:11867:错误:未定义引用'localeconv'

locale.h头文件存在并位于ndk dir sysroot/usr/include中.

我的工具链看起来像这样:

Gradle :(仅显示与NDK相关的部分)

 externalNativeBuild {
        cmake {

            arguments "-DANDROID_PLATFORM_LEVEL=${platformVersion}",
                    '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
        }

        ndk {
            abiFilters 'armeabi-v7a'

        }
    }
Run Code Online (Sandbox Code Playgroud)

cmake的

 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11 -Wall")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -frtti  -fexceptions  -Wall")

  //'native-lib' is the final .so that's packaged into apk
       target_link_libraries(native-lib
                   OPENAL
                   FREETYPE
                   android
                    EGL
                    ${OPENGL_LIB}
                    log
                    m
                    z
                    atomic
                    gnustl_static
                    ) 
Run Code Online (Sandbox Code Playgroud)

这是链接器命令行:

[1/1]链接CXX共享库........\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so FAILED:cmd.exe/C"cd.&& D:\Android\android-sdk \ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang ++.exe --target = armv7-none-linux-androideabi --gcc-toolchain = D:/ Android/android- sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 --sysroot = D:/ Android/android-sdk/ndk-bundle/sysroot -fPIC …

c++ android android-ndk

5
推荐指数
1
解决办法
2888
查看次数