小编Con*_*tin的帖子

选择OpenGL ES 1.1或OpenGL ES 2.0?

我将开始一个新的跨平台openGL项目(主要用于iPhone和PC).所以主要问题是:针对OpenGL ES 1.1或OpenGL ES 2.0?或两者?到目前为止我读过Open GL ES 1.1并没有真正弃用,不是吗?那么对于openGL ES 2.0会说些什么呢?可编程顶点和碎片整理器 - 还有别的吗?我听说阿尔法混合后性能下降了 - 这可能是真的吗?我假设openGL ES 2.0代码也应该在PC上运行 - 那么openGL ES 2.0是否真的更具未来意识?

那里的其他开发人员仍然在编写OpenGL ES 1.1或2.0?为什么?我假设如果我选择openGL ES 2.0,那么与openGL ES 1.1的向后兼容性也会有很多开销.但是有很多iPhone没有openGL ES 2.0支持 - 我该怎么做到这一点?那里有经验吗?

我发现只有这个问题:iPhone上的OpenGL ES 1.1或2.0类型相关,但实现并不是很深入......所以欢迎任何建议!非常感谢!

iphone cross-platform opengl-es opengl-es-2.0

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

GLSL中的纹理和颜色一起?

我无法弄清楚,如何使用OpenGL ES 2.0类似于OpenGL ES 1.1的结果.我想实际使用Sampler2D(将我的纹理与Alpha通道混合到Framebuffer)并设置Color.纹理应该用颜色绘制 - 就像在OpenGL ES 1.1中我的FragmentShader看起来像这样:

varying lowp vec4 colorVarying;
varying mediump vec2 texcoordVarying;
uniform sampler2D texture;

void main(){
    gl_FragColor = texture2D(texture, texcoordVarying) + colorVarying;
}
Run Code Online (Sandbox Code Playgroud)

但是"+ colorVarying"部分用黑色破坏了我的alpha通道(因为我还添加了colorVarying,如果AlphaValue为0)并且产生了奇怪的渐变效果......纹理和颜色通道如何在固定功能管道中组合?我对glColor4f的替换是:

void gl2Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a){
    const GLfloat pointer[] = {r, g, b, a};
    glVertexAttribPointer(ATTRIB_COLOR, 2, GL_FLOAT, 0, 0, pointer);
    glEnableVertexAttribArray(ATTRIB_COLOR);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 如果这是某种相关的......

对于颜色1.0,0.0,1.0,1.0这里是我现在得到的: 现在

我想得到:

我想看到什么

一些想法来实现这一目标?任何帮助,将不胜感激.

alpha blending fragment-shader opengl-es-2.0

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

C++中的高效字符串/模式匹配(suffixarray,trie,suffixtree?)

我正在寻找一个有效的数据结构来在一组非常庞大的字符串上进行字符串/模式匹配.我发现了try,suffix-trees和suffix-arrays.但到目前为止,我无法在C/C++中找到一个现成的实现(并且我自己实现它似乎很难并且容易出错).但是我仍然不确定Suffix-Arrays是否真的是我正在寻找的东西......我已经尝试过libdivsufsort和esaxx,但是无法找到如何根据我的需要使用它们:

我想使用一组预定义的字符串,使用通配符(甚至是正则表达式)来匹配用户输入.我有一个庞大的预定义字符串列表,即

"什么是*?" "什么是XYZ?" "多少*?" ...

现在我想找到最匹配的字符串(如果有的话,那就完全匹配).即用户输入:>什么是XYZ?应该找到"什么是XYZ?" 而不是"什么是*?",而是"什么是东西?" 应该找到"什么是*?" (假设*是任何字符数的通配符).

构建结构不是时间关键的(并且结构不必具有超空间效率),但搜索不应该花费太长时间.怎么可以轻松完成?欢迎任何框架/库或代码示例

谢谢

c++ suffix-tree pattern-matching trie suffix-array

8
推荐指数
1
解决办法
6348
查看次数

不一致的dll链接和dllimport静态数据成员的定义是不允许的

假设我有这两个文件:

Header.h

class DLL ExportClass{
public:
  ExportClass();
  static int test;
};
Run Code Online (Sandbox Code Playgroud)

Source.cpp

#ifdef EXPORT
    #define DLL __declspec(dllexport)
#else
    #define DLL __declspec(dllimport)
#endif

#include "Header.h"

int ExportClass::test = 0;
ExportClass::ExportClass(){
}
Run Code Online (Sandbox Code Playgroud)

我不会定义EXPORT(导入已导出的类与static成员),为什么我会收到这些警告:

1>source.cpp(11): warning C4273: 'test' : inconsistent dll linkage
1>          header.h(4) : see previous definition of 'public: static int ExportClass::test'
1>source.cpp(13): warning C4273: 'ExportClass::ExportClass' : inconsistent dll linkage
1>          header.h(3) : see previous definition of '{ctor}'
Run Code Online (Sandbox Code Playgroud)

而这个错误:

1>source.cpp(11): error C2491: 'ExportClass::test' : definition of dllimport static …
Run Code Online (Sandbox Code Playgroud)

dllimport dllexport visual-c++

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

如何有效地解析C++中的bigdata json文件(wikidata)?

我有一个大约36 GB的json文件(来自wikidata),我希望更有效地访问它.目前我在C++中使用rapidjsons SAX风格的API - 但解析整个文件需要我的机器大约7415200毫秒(= 120分钟).我想根据json对象内部的两个主键之一('name'或'entity-key' - >'Stack Overflow'或'Q549037')访问此文件中的json对象.这意味着我必须在最坏的情况下解析当前的整个文件.

所以我想到了两种方法:

  • 将大文件拆分成数十亿个小文件 - 文件名指示名称/实体键(即Q549037.json/Stack_Overflow.json或Q549037#Stack_Overflow.json) - >不确定存储过载
  • 从主键到ftell()文件中的位置构建某种索引.构建索引应该花费大约120分钟(就像现在解析一样),但访问速度应该更快
    • 即使用两个东西std::unorderedmap(可能再次遇到内存问题)
    • 索引文件 - 创建两个文件:一个按名称排序的条目和一个按实体键排序的文件(由于排序,创建这些文件可能需要更长的时间)

这样的问题最好的做法是什么?我应该遵循哪种方法?还有其他想法吗?

c++ json bigdata rapidjson wikidata

8
推荐指数
1
解决办法
1326
查看次数

如何用IOS检测Fingersize?

是否可以在IOS应用程序中检测到fingerize?我在文档中读到:

注意:屏幕上的手指提供与鼠标指针完全不同的精度.当用户触摸屏幕时,接触区域实际上是椭圆形的并且倾向于在用户认为他或她触摸的点之下偏移.该"接触片"的大小和形状也根据手指触摸屏幕,手指的大小,手指在屏幕上的压力,手指的方向以及其他因素而变化.底层的Multi-Touch系统会为您分析所有这些信息并计算单个触摸点.

资料来源:http://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html

那么,这是否意味着SDK无法检测物理手指大小?我想要完成的任务:我需要在我的OpenGL ES应用程序中使用虚拟"按钮".如果有人像游戏手柄一样拿着iPhone,他会用一根手指按两个按钮(滚动拇指).我希望我的意思是可以理解的......

有任何想法吗?

multi-touch ios

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

JNI_CreateJavaVM()以退出代码1终止

我正在尝试使用JNI从C++调用Java方法.要做到这一点,我已经安装jdk1.7.0_51,链接jdk1.7.0_51\lib\jvm.lib,包括jdk1.7.0_51\includejdk1.7.0_51\include\win32.在Visual Studio 2012中使用以下代码我尝试创建一个Java vm对象 - 但该函数总是以退出代码1终止我的应用程序(该函数不返回1:我的程序完全终止并发送退出代码1).

#include <iostream>
#include "jni.h"

int main(int argc, char*argv[]){
  JNIEnv* env = nullptr;
  JavaVM* jvm = nullptr;
  JavaVMInitArgs vm_args;
  JavaVMOption options[2];
  options[0].optionString = "-Djava.class.path=.";
  options[1].optionString = "-DXcheck:jni:pedantic";  
  vm_args.version = JNI_VERSION_1_6;
  vm_args.nOptions = 2;
  vm_args.options = options;
  vm_args.ignoreUnrecognized = JNI_TRUE; // remove unrecognized options
  int ret = JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args);
  std::cout << "This code is never reached" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

操作系统: Windows 7(x64)

编译器: Visual …

c++ java-native-interface jnienv

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

日语的节省空间的字符编码?

在我看来,一个常见的问题是:字符编码与位图字体结合使用.大多数多语言编码在不同的字符类型之间有很大的空间,甚至还有很多未使用的代码点.因此,如果我想使用它们,我会浪费大量内存(不仅仅是为了保存多字节文本 - 我的意思是专门用于我的位图字体中的空格) - 而且VRAM大部分都非常有价值......所以唯一合理的东西似乎要:在我的纹理上使用自定义映射,即UTF-8字符(这样就不会浪费空间).但是:这种努力似乎与使用自己的专有字符编码相同(因此我的纹理中也有自己的字符顺序).在我的特殊情况下,我获得了4096个不同角色的纹理空间,并且需要角色来显示拉丁语言和日语(它是一个混乱的utf-8,只支持generall cjk代码页).有人有类似的问题(我真的很想知道,如果没有)?如果已经有任何办法?

编辑:这里描述了同样的问题http://www.tonypottier.info/Unicode_And_Japanese_Kanji/但它没有提供真正的解决方案如何将这些bitmapfont映射保存到utf-8空间效率.所以欢迎任何进一步的帮助!

EDIT2:

非常感谢您的回答.对不起,我的问题描述得不够明确.

我真正想要解决的是:CJK Unicode范围超过20000个字符.但是,只有大约2000个字符的子集才能正确显示日文文本.这些特征在U + 4E00到U + 9FA5的范围内传播.所以我需要以某种方式将这些Unicode代码点(仅限2000日语)转换为我创建的纹理的坐标(我可以按照我想要的方式对字符进行排序).

即U + 4E03是日文字符,但U + 4E04,U + 4E05,U + 4E06不是.那么U + 4E07也是日本人.所以最简单的解决方案,我可以看到:字符U + 4E03在我的纹理中留下三个空格(或者写出不必要的字符U + 4E04,U + 4E05,U + 4E06那里),然后写入U + 4E07.但这会浪费太多的纹理空间(20000个字符,即使只需要2000个字符).所以我希望能够只放入我的纹理:"...... U + 4E03,U + 4E07 ......".但我不知道如何编写我的displayText函数 - 因为我不知道我想要显示的字形的纹理坐标在哪里.会有一个hashmap或类似的东西,但是我不知道如何存储这些数据(为每个字符编写会很麻烦...... {U + 4E03,128},{U + 4E07, 129} ...填写hasmap).

问题:1)没有特定的格式 - 所以我将自己编写displayText函数.2)没有理由反对unicode - 它只是我的bitmapfont的CJK范围问题.3)我认为,这通常是平台和语言无关的,但就我而言,我在Mac OS X/iOS上使用C++和OpenGL.

非常感谢您的帮助!如果您对此有任何进一步的想法,它将真的帮助我很多!

unicode character-encoding shift-jis

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

使用GLKit进行跨平台开发?

我刚刚安装了当前的Xcode 4版本,并实现了新的"GLKit"API,它也用于iOS的OpenGL模板.所以,我想为iOS,Mac和Windows开发一款跨平台游戏.GLKit在便携性方面似乎倒退了一步,但GLKit功能(特别像异步纹理加载)是很好的好处......

如何使用GLKit开发跨平台游戏?我需要两次写任何grapics代码,对吗?或者是否有类似于Windows的GLKit实现?

任何想法,变通方法,代码设计建议(如何将GLKit代码与其他组件分开?)都是受欢迎的 - 谢谢!

iphone cross-platform opengl-es-2.0 glkit

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

如何在C++中切换2个函数集?

有没有办法,我可以有效地在两个相似的功能集(C/C++)之间切换?为了更好地解释我的意思,让我说我有两组全局函数,如:

void a_someCoolFunction();
void a_anotherCoolFunction(int withParameters);
…

void b_someCoolFunction();
void b_anotherCoolFunction(int withParameters);
…
Run Code Online (Sandbox Code Playgroud)

我希望能够在运行时"切换"我的程序中使用哪一个.但是:我不想在每个功能上都有一个条件,例如:

void inline someCoolFunction(){
    if(someState = A_STATE){
        a_someCoolFunction();
    }else{
        b_someCoolFunction();
    }
}
Run Code Online (Sandbox Code Playgroud)

因为,我希望在我的主循环中调用每个函数 - 所以如果我可以做这样的事情(在我的mainloop的开头或someState被更改时)会更好:

if(someState = A_STATE){
    useFunctionsOfType = a;
}else{
    useFunctionsOfType = b;
}
Run Code Online (Sandbox Code Playgroud)

然后简单地打电话

useFunctionsOfType _someCoolFunction();
Run Code Online (Sandbox Code Playgroud)

我希望它可以理解我的意思......我的背景:我写一个应用程序,这应该能够处理的OpenGL ES 1.1和OpenGL ES 2.0都正常-但我不想写的每一个渲染方法2倍(如:renderOpenGL1()renderOpenGL2()我宁愿只写render()).我已经有类似的方法:glLoadIdentity(); myLoadIdentity();......但需要一种方法在这两种方式之间切换.有没有办法以高效的方式实现这一目标?

c c++ performance function

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