问题列表 - 第161358页

采样全屏纹理的最佳方式

在片段着色器中对全屏纹理进行采样的最佳方法是什么,例如延迟渲染器中的g-buffer,或后处理着色器中的场景纹理?

目前我使用以下两种方式:

  • 将屏幕大小作为制服传递给着色器,并从gl_FragCoord以下位置计算(u,v):

    vec2 texCoord = gl_FragCoord.xy / vScreenSize;
    vec3 c = texture( tex, texCoord ).rgb;
    
    Run Code Online (Sandbox Code Playgroud)

    似乎不是理想的,因为需要划分并且为着色器提供屏幕尺寸是麻烦的.

  • 转换gl_FragCoord.xyivec并使用texelFetch:

    vec3 c = texelFetch( tex, ivec2(gl_FragCoord.xy), 0 ).rgb;
    
    Run Code Online (Sandbox Code Playgroud)

    也正因为从转换不理想floatint是必需的.

那么还有更好的方法吗?我真的只想在我的像素着色器绘制的精确点处对缓冲区进行采样.


//编辑:


好吧,根据来自顶点着色器的插值纹理坐标的建议,我设法找出以下代码:

顶点着色器:

#version 150

uniform mat4 im_ModelViewProjectionMatrix;

in vec3 iv_Vertex;
noperspective out vec2 vVertCoord;

void main( void )
{
    gl_Position = im_ModelViewProjectionMatrix * vec4(iv_Vertex, 1.0);
    vVertCoord = (gl_Position.xy / gl_Position.w) * (0.5) + vec2(0.5);
}
Run Code Online (Sandbox Code Playgroud)

我基本上使用透视分割从剪辑空间位置计算归一化设备坐标(NDC),然后将NDC(范围从[-1,1])映射到区间[0,1].这适用于全屏四边形(即使没有透视分割,因为坐标非常简单).我需要在延迟渲染器中绘制为光几何的任意几何体有一些问题.在顶点着色器中,我输出vVertCoord为red = …

opengl glsl

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

单调对 - Codility

我只是在Codility,并遇到了一个任务,我无法找到有针对性的O(n)效率的解决方案; 我的解决方案运行O(n2).如果有人能给我一个关于如何让它跑得更快的提示,我会很高兴的.这是任务.

给出了由N个整数组成的非空零索引数组A.

单调对是一对整数(P,Q),使得0≤P≤Q<N且A [P]≤A[Q].

目标是找到其指数最远的monotonic_pair.更确切地说,我们应该最大化Q-P的值.仅找到距离就足够了.

例如,考虑数组A,使得:

A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
Run Code Online (Sandbox Code Playgroud)

有11个monotonic_pairs:(0,0),(0,2),(1,1),(1,2),(1,3),(1,4),(2,2),(3, 3),(3,4),(4,4),(5,5).对中的最大距离是3(1,4).

写一个函数:

class Solution {public int solution(int [] A); }

如果给定N个整数的非空零索引数组A,则返回任何monotonic_pairs中的最大距离.

例如,给定:

A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
Run Code Online (Sandbox Code Playgroud)

该函数应返回3,如上所述.

假使,假设:

N是[1..300,000]范围内的整数; 数组A的每个元素都是[-1,000,000,000..1,000,000,000]范围内的整数.复杂:

预期的最坏情况时间复杂度是O(N); 预期的最坏情况空间复杂度是O(N),超出输入存储(不计入输入参数所需的存储).可以修改输入数组的元素.

我的第一个想法解决方案(在O(n2)中运行):

    public static int solution(int[] A) {
    int max = 0;
    for(int i=0; i<A.length-1; i++) {
        for(int j=i+1; …
Run Code Online (Sandbox Code Playgroud)

java algorithm

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

是否有可能知道函数是否从引用调用?

这两个调用都会发出"hello"警告,但有可能知道它是如何调用的吗?

function Test() {
    this.foo = this;
}

Test.prototype.bar = function (value) {
    // Check if it was called through foo
    alert(value);
}

var test = new Test();

test.foo.bar('hello');
test.bar('hello');
Run Code Online (Sandbox Code Playgroud)

基本上我想知道它是从test还是test.foo调用的.

可能吗?

javascript

4
推荐指数
1
解决办法
55
查看次数

每个功能之前和之后是否有黄瓜钩

有没有办法在每个黄瓜功能之前和之后运行特定代码块与某些标签?

由于设置过程非常昂贵,我不想在每个场景之前运行它.

ruby hook cucumber

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

如何以编程方式为视图设置特定的宽度/高度?

我在xml布局文件中有一个布局.
在运行时,我想创建2个文本视图,然后添加到布局中.
=>我无法通过特定大小为2文本视图设置宽度/高度.
如果我设置MATCH_PARENT,那没关系.
如果我按任何特定尺寸设置,它只是WRAP_CONTENT

XML布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.androidsnipcode.MainActivity$PlaceholderFragment"
    android:orientation="vertical"
    android:id="@+id/mylayout">
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)


Dimens.xml:

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="heigh">300dip</dimen>
    <dimen name="width">600dip</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)

Activity.java的onCreate():

LinearLayout layout = (LinearLayout) findViewById(R.id.mylayout);

        LinearLayout.LayoutParams layoutparams1 = new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, R.dimen.heigh);
        TextView tv = new TextView(this);
        tv.setLayoutParams(layoutparams1);
        tv.setText("hello 1");
        tv.setBackgroundColor(Color.CYAN);
        layout.addView(tv);

        LinearLayout.LayoutParams layoutparams2 = new LinearLayout.LayoutParams(
                R.dimen.width, LayoutParams.MATCH_PARENT);
        TextView tv2 = new TextView(this);
        tv2.setLayoutParams(layoutparams2);
        tv2.setText("hello 2");
        tv2.setBackgroundColor(Color.MAGENTA);
        layout.addView(tv2);
Run Code Online (Sandbox Code Playgroud)

屏幕截图:第一个textview的高度和第二个textview的宽度不符合我的预期(它的包装内容不是我特定的大小)
第一个textview的高度和第二个textview的宽度不符合我的预期

android android-layout

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

T-SQL触发器和表名

在触发器内部,我想知道触发器触发的表的名称:是否可以通过T-SQL以编程方式获取它?

sql-server triggers

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

java play框架中的多对多关系

我正在尝试使用多对多方法产品与商店 Product.java具有多对多关系

package models;
@Entity
public class Product extends Model {

    @Id
    @SequenceGenerator(name="product_gen", sequenceName="product_id_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="product_gen")
    @Column(name="id")
    public Long id;

    @Required
    public String name;

    @Required
    public Float price;

    @ManyToMany(cascade = CascadeType.ALL)
    public List<Shop> shops = new ArrayList<Shop>();

    public Product(String name, float price) {
        this.name = name;
        this.price = price;
    }
    public static List<Product> all(){
        return find.all();
    }
    public static Model.Finder<Long, Product> find = new Model.Finder(Long.class, Product.class);

    public static Product create(String name,float price) {
        Product product = new Product(name, price); …
Run Code Online (Sandbox Code Playgroud)

java many-to-many playframework ebean

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

PHP获取对象键

我有一个我为多维数组创建的javascript对象,见下文:

var myObject = {};

myObject['firstArray'] = ['firstValue', 'secondValue'];
myObject['secondArray'] = ['firstValue', 'secondValue'];
Run Code Online (Sandbox Code Playgroud)

然后我使用JSON stringify函数准备它传递给PHP页面:

arrayToPass = JSON.stringify(myObject);
Run Code Online (Sandbox Code Playgroud)

在PHP页面中,我然后解码对象:

$passedObject = file_get_contents( "php://input" );

$splitObject = json_decode($passedObject);
Run Code Online (Sandbox Code Playgroud)

然后我循环遍历splitObject以提取值:

foreach($splitObject as $array){
      echo ($array);
      echo"<br>";
     foreach($array as $value){
        echo $value;
            echo "<br>";
     }
  }
Run Code Online (Sandbox Code Playgroud)

输出如下:

Array
firstValue
secondValue

Array
firstValue
secondValue
Run Code Online (Sandbox Code Playgroud)

有没有办法让输出显示实际的数组名称而不仅仅是数组,所以结果应该是:

firstArray
firstValue
secondValue

secondArray
firstValue
secondValue
Run Code Online (Sandbox Code Playgroud)

我尝试使用echo key($array)但只返回0,因为它是一个对象而不是我相信的数组.

javascript php arrays object

0
推荐指数
1
解决办法
82
查看次数

Python中的双进度条

有没有办法在Python中创建双进度条?我想在彼此内部运行两个循环.对于每个循环,我想要一个进度条.我的程序看起来像:

import time
for i1 in range(5):
    for i2 in range(300):
        # do something, e.g. sleep
        time.sleep(0.01)
        # update upper progress bar
    # update lower progress bar
Run Code Online (Sandbox Code Playgroud)

中间某处的输出应该看起来像

50%|############################                                  |ETA: 0:00:02
80%|##################################################            |ETA: 0:00:04
Run Code Online (Sandbox Code Playgroud)

已经存在的非常酷的进度条模块似乎不支持这一点.

python progress-bar

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

什么是"BuildConfig.DEBUG条件检查"?

Android Lint抱怨assert()使用,并建议使用BuildConfig.DEBUG条件检查.

我完全理解为什么断言在android上使用是不安全的,但究竟什么是"BuildConfig.DEBUG条件检查"?

如何修改以下示例代码?

Context ctx = getContext();
assert (ctx instanceof FragmentActivity);
fragment_manager = ((FragmentActivity) ctx).getSupportFragmentManager();
Run Code Online (Sandbox Code Playgroud)

android

24
推荐指数
1
解决办法
6288
查看次数